我正在使用Oracle 11g数据库,其中包含数据,其中我想使用oracle查询用虚拟文本替换动态生成的文本。例如,我的表中的列包含数据:
Hello Mike, Your registered no. is 3525. Kindly check the same
。
现在的问题是,客户名称即'Mike'可能是动态的,这就是我无法使用SUBSTR功能的原因。我想用XXXX替换3525
E.g Hello Mike, Your registered no. is XXXX. Kindly check the same
。
请帮我解决这个问题。我正在使用Oracle 11g
答案 0 :(得分:2)
如果您字符串中唯一的动态部分是名称(假设名称不包含数字......),您可以尝试:
select regexp_replace('Hello Mike, Your registered no. is 3525. Kindly check the same',
'([0-9])',
'X'
)
from dual
这只是用'X'替换每个数字字符。
要使用固定字符串替换“AB3525”之类的内容,例如“XXXX”,您可以尝试将其替换为固定字符:
select regexp_replace('Hello Mike, Your registered no. is AB3525. Kindly check the same',
'(Hello [^\,]*\, Your registered no. is )([^\.]*)(\. Kindly check the same)',
'\1XXXX\3'
)
from dual
答案 1 :(得分:2)
您可以使用 TRANSLATE ,这比 REGULAR EXPRESSION 快得多。它只会出现X
的数字。
例如,
SQL> SELECT TRANSLATE('Hello Mike, Your registered no. is 3525. Kindly check the same',
2 '0123456789',
3 'XXXXXXXXXX') str
4 FROM dual;
STR
--------------------------------------------------------------
Hello Mike, Your registered no. is XXXX. Kindly check the same
SQL>
答案 2 :(得分:1)
这是另一种方法:您可以在多个表达式中拆分字符串,并使用\{position number}
select regexp_replace('Hello Mike, Your registered no. is 3525. Kindly check the same',
'(Hello )(.*)(, Your registered no. is )(.*)(. Kindly check the same)',
'Hello \2, Your registered no. is [xxx]. Kindly check the same'
)
from dual