Oracle字符串替换

时间:2009-08-21 15:29:29

标签: oracle plsql

我的oracle数据库中有一个列,我无法控制的原因包含CSV字符串,例如

项目a,项目b,项目c,项目d

我想运行UPDATE语句来删除项目c。因此以

结束

项目a,项目b,项目d

我怎样才能实现这个目标

3 个答案:

答案 0 :(得分:9)

您可以使用Oracle REPLACE函数:

UPDATE table
SET col = replace(col, 'item c', '')

您只需要小心处理它作为CSV的一部分,例如剥离以下逗号。这可能意味着首先替换“项目c”,然后替换“项目c”以捕获这两种情况。


编辑:嗯,我可能会误解。我的解决方案是基于从CSV中删除特定字符串 - 如果您希望始终替换第3项,那么Vincent的答案是您需要的答案

答案 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