我的oracle数据库中有一个列,我无法控制的原因包含CSV字符串,例如
项目a,项目b,项目c,项目d
我想运行UPDATE语句来删除项目c。因此以
结束项目a,项目b,项目d
我怎样才能实现这个目标
答案 0 :(得分:9)
您可以使用Oracle REPLACE函数:
UPDATE table
SET col = replace(col, 'item c', '')
您只需要小心处理它作为CSV的一部分,例如剥离以下逗号。这可能意味着首先替换“项目c”,然后替换“项目c”以捕获这两种情况。
答案 1 :(得分:4)
如果你有一个相当新的Oracle版本(我相信在Oracle 10中引入了正则表达式),你可以使用REGEXP_REPLACE
:
UPDATE table SET column = REGEXP_REPLACE(column,'[^\,]+,','',1,3)
(另外,请对以关系数据库存储CSV的天才做暴力事。)
答案 2 :(得分:2)
您可以使用INSTR和SUBSTR的组合来删除第三个字段:
SQL> WITH a AS (SELECT 'Item a,Item b,Item c,Item d' col FROM dual)
2 SELECT substr(col, 1, instr(col, ',', 1, 2))
3 || substr(col, instr(col, ',', 1, 3) + 1) sub
4 FROM a;
SUB
--------------------
Item a,Item b,Item d