【问题标题】:Oracle string replacementOracle 字符串替换
【发布时间】:2013-04-20 06:19:32
【问题描述】:

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

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

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

结束

项目a,项目b,项目d

我怎样才能做到这一点

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    您可以使用 Oracle REPLACE 函数:

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

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


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

    【讨论】:

      【解决方案2】:

      如果你有一个相当新的 Oracle 版本(我相信正则表达式是在 Oracle 10 中引入的),你可以使用REGEXP_REPLACE

      UPDATE table SET column = REGEXP_REPLACE(column,'[^\,]+,','',1,3)
      

      (另外,请对以这种方式将 CSV 存储在关系数据库中的天才做一些暴力行为。)

      【讨论】:

      • 请注意,如果 CSV 文件引用了包含逗号 '"Smith,John", 123,2009-12-31' 的字符串
      • 正则表达式支持正迅速成为我最喜欢的功能!!
      【解决方案3】:

      您可以使用 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
      

      【讨论】:

        猜你喜欢
        • 2021-12-29
        • 2012-09-25
        • 2020-02-11
        • 1970-01-01
        • 2020-03-31
        • 1970-01-01
        • 1970-01-01
        • 2014-12-13
        • 1970-01-01
        相关资源
        最近更新 更多