【问题标题】:Oracle regex replace issueOracle 正则表达式替换问题
【发布时间】:2016-02-19 07:36:14
【问题描述】:

我有一个 oracle 表,其中一列具有以下值,

,21A,22,21,28,28

我想进行正则表达式替换以删除 ,21(完全匹配),但它会删除 ,21A 中的值

以下是我的查询,

update STUDENT set SCORES = REGEXP_REPLACE(SCORE, ',21' , '', 1, 1) where STUDENT_ID = 1;

如何做到这一点?有什么想法吗?

【问题讨论】:

  • @AlexanderDerck,这不起作用。
  • 我的坏显然是 oracle 正则表达式没有环视。你不能只检查,21, 并用, 代替空字符串吗?
  • 您可以改正数据库设计并为自己省去其他麻烦吗?此列违反第一范式。如果你被别人的糟糕设计所困扰,我会感受到你的痛苦。
  • @Gary_W,这已经实现并正在运行。此时设计更改将触发许多其他更改。
  • 也许REGEXP_REPLACE(SCORE, ',21(,|$)' , '\1', 1, 1) 就够了?甚至REGEXP_REPLACE(SCORE, ',21(\W|$)' , '\1', 1, 1)?

标签: regex oracle regexp-replace


【解决方案1】:

在您的情况下,您可以使用 ,21(\W|$) 正则表达式。它匹配,21,后跟非单词字符或字符串结尾。

REGEXP_REPLACE(SCORE, ',21(\W|$)' , '\1', 1, 1)

Here is how可以在Oracle SQL中进行全词搜索和替换:

regexp_replace( 
    haystack
    , '(\W|^)(' || what_to_replace || ')(\W|$)'
    , '\1' || with_what || '\3'
    , 1
    , 0
    , 'imn'
)

【讨论】:

    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多