从oracle sql中的字符串中提取特殊字符

时间:2018-02-22 07:26:19

标签: sql oracle

我需要一个查询来删除字符串中的所有字母数字字符,并且只给我特殊的字符。

如果字符串为'@#45gr@@3',则查询应该给我'@#@@'

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