Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否更改表中的数据以添加字符?_Sql_Oracle_Substring - Fatal编程技术网

Sql 是否更改表中的数据以添加字符?

Sql 是否更改表中的数据以添加字符?,sql,oracle,substring,Sql,Oracle,Substring,我试图修改一个表,将charachterX添加到表中某一行的每一项中 我需要将表中的所有事务在一个字段下中继到40个字符,这需要使用批处理执行的DML语句来完成。第40个字符应设置为aX–以显示其已被缩短 目前我正在尝试使用SUBSTR来尝试更新行的方法 注意:下面的示例只是一些尝试和错误尝试,我在SQL FIDLE中创建了一个示例表,因为我还不允许更新主表 UPDATE test SET tester = SUBSTR(tester , 40, 1) + 'x'; 但是,这会在所有实例上返回

我试图修改一个表,将charachter
X
添加到表中某一行的每一项中

我需要将表中的所有事务在一个字段下中继到40个字符,这需要使用批处理执行的DML语句来完成。第40个字符应设置为a
X
–以显示其已被缩短

目前我正在尝试使用
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