更改表格中的数据以添加字符?

时间:2014-07-29 10:52:54

标签: sql oracle substring

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

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

目前我正在尝试使用SUBSTR试用一种更新行的方法

注意:在下面的示例中只是一些尝试和错误尝试,我在SQL小提琴中创建了一个示例表,因为我还不允许在主表上更新

UPDATE test SET tester = SUBSTR(tester , 40, 1) + 'x';

然而,这会在所有实例上回归NULL

我试过了

UPDATE test SET tester = tester + SUBSTR(tester , 40, 1) + 'x';

然而,这(在fiddler中构建schem时)返回

Schema Creation Failed: ORA-01722: invalid number

我尝试浏览谷歌和oracle数据字典,但是我的研究技巧是裤子,我可以具体看哪些想法?

我找到this,但我在实施

时遇到了问题

任何想法都会有所帮助。

由于

2 个答案:

答案 0 :(得分:1)

我有这个工作:

UPDATE test SET tester = SUBSTR(tester,1,40) || 'X';

使用+代替||

的喜剧错误

简直不敢相信我花了将近1小时来解决这个问题! Live'n'learn我猜! :)

答案 1 :(得分: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