1

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

,21A,22,21,28,28

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

以下是我的查询,

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

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

4

1 回答 1

2

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

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

以下是在 Oracle SQL 中执行全词搜索和替换的方法:

regexp_replace( 
    haystack
    , '(\W|^)(' || what_to_replace || ')(\W|$)'
    , '\1' || with_what || '\3'
    , 1
    , 0
    , 'imn'
)
于 2016-02-18T23:29:05.727 回答