我需要一个查询来删除字符串中的所有字母数字字符,并且只给我特殊的字符。
如果字符串为'@#45gr@@3'
,则查询应该给我'@#@@'
。
答案 0 :(得分:1)
SELECT REGEXP_REPLACE('@#45gr@@3','[^[:punct:]'' '']', NULL) FROM dual;
答案 1 :(得分:1)
老式的方式,replace()
电话:
select translate(upper(txt)
, '.1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ'
, '.') as spec_txt
from t42
/
使用replace()
解决方案最好输入我们要排除的所有字符。是的,这是一个较大的集合(可能),但至少它是明确定义的。我们不想继续修改代码来处理输入字符串中的新字符。
显然,正则表达式解决方案更紧凑且who can deny the elegance of @venkatesh solution?但是,评估正则表达式比更集中的SQL函数更昂贵,因此在性能成为问题的情况下,值得了解其他处理方式。
答案 2 :(得分:0)
评论中写的所有内容很可能都是非常真实的(特别是讨论异常,特殊情况等的第5个)。我的感觉是Jörg对正则表达的了解比我所知道的要多得多。
无论如何,以简单的外观来简短地讲述发布的问题(“删除所有数字和字母”),这样的事情可能有用:
new