Oracle 正则表达式替换问题

Oracle regex replace issue

我有一个 oracle table,其中一列的值低于

,21A,22,21,28,28

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

中的值

下面是我的查询,

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

如何实现?有什么想法吗?

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

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

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

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