[英]extracting special character from a string in oracle sql
我需要一个查询来从字符串中删除所有字母数字字符并只给我特殊字符。
如果字符串是'@#45gr@@3'
查询应该给我'@#@@'
。
SELECT REGEXP_REPLACE('@#45gr@@3','[^[:punct:]'' '']', NULL) FROM dual;
老式的方式,使用replace()
调用:
select translate(upper(txt)
, '.1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ'
, '.') as spec_txt
from t42
/
使用replace()
解决方案更好地输入我们想要排除的所有字符。 是的,这是更大的集合(可能),但至少它是明确定义的。 我们不想继续修改代码来处理输入字符串中的新字符。
显然正则表达式解决方案更紧凑,谁能否认@venkatesh 解决方案的优雅? 然而,评估正则表达式比更集中的 SQL 函数更昂贵,因此对于那些性能成为问题的情况,了解其他做事方式是值得的。
评论中写的所有内容很可能都是真实的(尤其是第 5 条关于异常、特殊情况等的内容)。 我的感觉是 Jörg 对正则表达式的了解比我所知道的要多。
无论如何,长话短说,就其非常简单的外观而言,关于发布的问题(“删除所有数字和字母”),这样的事情可能会奏效:
SQL> select regexp_replace('a@#45gr@@3$.', '[[:digit:]]+|[[:alpha:]]+', '') result
2 from dual;
RESULT
------
@#@@$.
SQL>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.