Sql 是否更改表中的数据以添加字符?
我试图修改一个表,将charachterSql 是否更改表中的数据以添加字符?,sql,oracle,substring,Sql,Oracle,Substring,我试图修改一个表,将charachterX添加到表中某一行的每一项中 我需要将表中的所有事务在一个字段下中继到40个字符,这需要使用批处理执行的DML语句来完成。第40个字符应设置为aX–以显示其已被缩短 目前我正在尝试使用SUBSTR来尝试更新行的方法 注意:下面的示例只是一些尝试和错误尝试,我在SQL FIDLE中创建了一个示例表,因为我还不允许更新主表 UPDATE test SET tester = SUBSTR(tester , 40, 1) + 'x'; 但是,这会在所有实例上返回
X
添加到表中某一行的每一项中
我需要将表中的所有事务在一个字段下中继到40个字符,这需要使用批处理执行的DML语句来完成。第40个字符应设置为aX
–以显示其已被缩短
目前我正在尝试使用SUBSTR
来尝试更新行的方法
注意:下面的示例只是一些尝试和错误尝试,我在SQL FIDLE中创建了一个示例表,因为我还不允许更新主表
UPDATE test SET tester = SUBSTR(tester , 40, 1) + 'x';
但是,这会在所有实例上返回NULL
我试过了
UPDATE test SET tester = tester + SUBSTR(tester , 40, 1) + 'x';
但是(在fiddler中构建schem时)返回
我曾尝试浏览谷歌和甲骨文数据字典,但我的研究技能是裤子,有什么具体的想法吗
我找到了,但执行起来有困难
任何想法都会有帮助
谢谢我有这个工作:
UPDATE test SET tester = SUBSTR(tester,1,40) || 'X';
使用+
而不是|
真不敢相信我花了将近1个小时才弄明白!我想是活到老学到老!:) 串联运算符是
|
,而不是+
。你也有你的子串参数的错误方式;您可能只想将其应用于长度超过40个字符的值:
UPDATE test
SET tester = SUBSTR(tester, 1, 39) || 'X'
WHERE LENGTH(tester) > 40;
只有在必须缩短第40个字符时,才会将其设置为X
。(当然,如果您有一个40个字符长的原始值,并且已经以X
结尾,您将无法判断它是否已被截断。)
使用起始数据:
SELECT tester, LENGTH(tester) FROM test;
TESTER LENGTH(TESTER)
-------------------------------------------------- --------------
abcdefghijklmnopqrstuvwxy 39 char value 39
abcdefghijklmnopqrstuvwxyz 40 char value 40
abcdefghijklmnopqrstuvwxyza 41 char value 41
abcdefghijklmnopqrstuvwxyzab 42 char value 42
abcdefghijklmnopqrstuvwxyzabcdefghij 50 char value 50
这将更新三行,并为您留下:
SELECT tester, LENGTH(tester) FROM test;
TESTER LENGTH(TESTER)
-------------------------------------------------- --------------
abcdefghijklmnopqrstuvwxy 39 char value 39
abcdefghijklmnopqrstuvwxyz 40 char value 40
abcdefghijklmnopqrstuvwxyza 41 char valX 40
abcdefghijklmnopqrstuvwxyzab 42 char vaX 40
abcdefghijklmnopqrstuvwxyzabcdefghij 50X 40
SELECT tester, LENGTH(tester) FROM test;
TESTER LENGTH(TESTER)
-------------------------------------------------- --------------
abcdefghijklmnopqrstuvwxy 39 char value 39
abcdefghijklmnopqrstuvwxyz 40 char value 40
abcdefghijklmnopqrstuvwxyza 41 char valX 40
abcdefghijklmnopqrstuvwxyzab 42 char vaX 40
abcdefghijklmnopqrstuvwxyzabcdefghij 50X 40