我有一个 oracle 表,其中一列具有以下值,
,21A,22,21,28,28
我想进行正则表达式替换以删除 ,21 (完全匹配),但它会从 ,21A 中删除值
以下是我的查询,
update STUDENT set SCORES = REGEXP_REPLACE(SCORE, ',21' , '', 1, 1) where STUDENT_ID = 1;
如何做到这一点?有任何想法吗?
我有一个 oracle 表,其中一列具有以下值,
,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, 1)
以下是在 Oracle SQL 中执行全词搜索和替换的方法:
regexp_replace(
haystack
, '(\W|^)(' || what_to_replace || ')(\W|$)'
, '\1' || with_what || '\3'
, 1
, 0
, 'imn'
)