如何用REGEXP_替换特殊字符

如何用REGEXP_替换特殊字符,regex,oracle,regexp-replace,Regex,Oracle,Regexp Replace,我对下面的正则表达式有意见 select REGEXP_REPLACE(declinereasondesc, '(.+)(£)(\d+)', '\1\3 (GBP)') as r from DECLINEREASON t 它与以下行不匹配 Too expensive : By less than £100 Too expensive : By more than £200 预期结果 Too expensive : By less than 100 (GBP) Too expensive :

我对下面的正则表达式有意见

select REGEXP_REPLACE(declinereasondesc, '(.+)(£)(\d+)', '\1\3 (GBP)') as r from DECLINEREASON t
它与以下行不匹配

Too expensive : By less than £100
Too expensive : By more than £200
预期结果

Too expensive : By less than 100 (GBP)
Too expensive : By more than 200 (GBP)
编辑:

非信徒截图

我自己发现了问题,我相信每个人都怀疑

解决方案包含两个步骤,第一个步骤是获取符号代码,即使您将其复制到select ascii中,它也不会飞行。您必须选择如下所示的符号才能获得正确的代码

select ascii(substr(declinereasondesc, 30,1)) from DECLINEREASON t
where declinereasonid = 7;
就我而言,它给出了49827

然后

只有这样,它才能起作用。

正在这里工作您得到的输出是什么?你的正则表达式可以很好地用于me@arunb2w它与世界其他地区不匹配,所以没有太贵的变化:少于100@vks我知道它在oracle中不起作用。@LIUFA-它在这里工作得很好,选择REGEXP_替换“太贵:不足100英镑”,“不超过100英镑”、“+£\d+”、“\1\3英镑”作为双精度r;我认为您的源字符串不是您所期望的。数据库中的oracle字符集是什么?我认为这是由于数据库中的NLS_CHARACTERSET参数造成的DB@arunb2w可以是sys.props$中的SELECT value$,其中name='NLS_CHARACTERSET';给我ORA-00942:表或视图不存在。所以无法确认。您可以尝试从v$nls_参数中选择*参数,其中参数位于“nls_字符集”、“nls_语言”中;我很高兴你解决了你的问题。但英镑的ascii值是163。我建议您更改您的角色集,以避免将来出现此类问题。ASCII参考::@arunb2w如果我能…:
select REGEXP_REPLACE(declinereasondesc, '(.+)('||chr(49827)||')(\d+)', '\1\3 (GBP)') from DECLINEREASON t;