如何仅在 Oracle SQL 中的字符串开头替换出现?
How to replace occurrence only on the start of the string in Oracle SQL?
我有一个源列,我想搜索以 05、5、971971 和 97105 开头的字符串值,以替换为 9715。如输出 table 所示。
SOURCE OUTPUT
0514377920 971514377920
544233920 971544233920
971971511233920 971511233920
9710511233920 971511233920
我试过以下方法适用于第一种情况。
SELECT REGEXP_REPLACE ('0544377905', '^(*)', '9715')FROM dual;
但是对于第二种情况,以下内容不起作用:
SELECT REGEXP_REPLACE ('544377905', '^(*)', '9715')FROM dual;
我的正则表达式有问题。正如我得到的:ORA-12727:正则表达式中的反向引用无效。
您可以使用 alternation 提供四种模式;也就是说,在括号中,它们之间有一个竖线:
with t(source) as (
select '0514377920' from dual
union all select '544233920' from dual
union all select '971971511233920' from dual
union all select '9710511233920' from dual
)
SELECT source, REGEXP_REPLACE (source, '^(05|5|9719715|97105)', '9715') as output
FROM t;
SOURCE OUTPUT
--------------- --------------------
0514377920 971514377920
544233920 971544233920
971971511233920 971511233920
9710511233920 971511233920
根据您的数据和您的任何其他限制,您可以将其简化为替换任何包含 5 的字符串的第一部分,这适用于您的小样本:
SELECT source, REGEXP_REPLACE (source, '^.[^5]?5', '9715') as output
FROM t;
匹配零个或多个不是 5 的字符,后跟一个 5。不过,对于您的实际情况,这可能过于简单了。
我有一个源列,我想搜索以 05、5、971971 和 97105 开头的字符串值,以替换为 9715。如输出 table 所示。
SOURCE OUTPUT
0514377920 971514377920
544233920 971544233920
971971511233920 971511233920
9710511233920 971511233920
我试过以下方法适用于第一种情况。
SELECT REGEXP_REPLACE ('0544377905', '^(*)', '9715')FROM dual;
但是对于第二种情况,以下内容不起作用:
SELECT REGEXP_REPLACE ('544377905', '^(*)', '9715')FROM dual;
我的正则表达式有问题。正如我得到的:ORA-12727:正则表达式中的反向引用无效。
您可以使用 alternation 提供四种模式;也就是说,在括号中,它们之间有一个竖线:
with t(source) as (
select '0514377920' from dual
union all select '544233920' from dual
union all select '971971511233920' from dual
union all select '9710511233920' from dual
)
SELECT source, REGEXP_REPLACE (source, '^(05|5|9719715|97105)', '9715') as output
FROM t;
SOURCE OUTPUT
--------------- --------------------
0514377920 971514377920
544233920 971544233920
971971511233920 971511233920
9710511233920 971511233920
根据您的数据和您的任何其他限制,您可以将其简化为替换任何包含 5 的字符串的第一部分,这适用于您的小样本:
SELECT source, REGEXP_REPLACE (source, '^.[^5]?5', '9715') as output
FROM t;
匹配零个或多个不是 5 的字符,后跟一个 5。不过,对于您的实际情况,这可能过于简单了。