Oracle SQL - 查找字符从ASCII 0到ASCII 32及以上ASCII 128

时间:2018-03-07 06:04:06

标签: sql oracle regexp-like

我的表中有一些条目没有打印字符。我试着编写一个简单的脚本来在Oracle DB-

上执行
select column from table where regexp_like(column,'([[:cntrl:]]+)');

但这甚至匹配了多个空格的字符串。但空间还可以。

什么是最好的查询?

2 个答案:

答案 0 :(得分:0)

尝试使用具有适当十六进制范围的UNISTR,对应于您希望涵盖的ASCII范围:

SELECT column
FROM table
WHERE NOT REGEXP_LIKE('a',  '[' || unistr('\0021') || '-' || unistr('\007A') || ']')

这是我能做的最好的工作。字符范围从ASCII字符33到122.您可以使用此范围的否定来定位您想要的字符。

Demo

答案 1 :(得分:0)

这个怎么样:

select column 
from table 
where NOT regexp_like(column,'[ -~]');