Oracle SQL - 查找具有从 ASCII 0 到 ASCII 32 及以上 ASCII 128 的字符的字符串
Oracle SQL -Find strings that have a character from ASCII 0 to ASCII 32 and above ASCII 128
我的 table 中有一些条目包含非打印字符。我尝试编写一个简单的脚本在 Oracle DB 上执行-
select column from table where regexp_like(column,'([[:cntrl:]]+)');
但这甚至可以匹配具有多个空格的字符串。但是空格是可以的。
什么是最好的查询?
尝试使用具有适当十六进制范围的 UNISTR
,对应于您希望涵盖的 ASCII 范围:
SELECT column
FROM table
WHERE NOT REGEXP_LIKE('a', '[' || unistr('[=10=]21') || '-' || unistr('[=10=]7A') || ']')
这是我为让它正常工作所能做的最好的事情。字符范围从 ASCII 字符 33 到 122。您可以使用此范围的取反来定位您想要的字符。
这个怎么样:
select column
from table
where NOT regexp_like(column,'[ -~]');
我的 table 中有一些条目包含非打印字符。我尝试编写一个简单的脚本在 Oracle DB 上执行-
select column from table where regexp_like(column,'([[:cntrl:]]+)');
但这甚至可以匹配具有多个空格的字符串。但是空格是可以的。
什么是最好的查询?
尝试使用具有适当十六进制范围的 UNISTR
,对应于您希望涵盖的 ASCII 范围:
SELECT column
FROM table
WHERE NOT REGEXP_LIKE('a', '[' || unistr('[=10=]21') || '-' || unistr('[=10=]7A') || ']')
这是我为让它正常工作所能做的最好的事情。字符范围从 ASCII 字符 33 到 122。您可以使用此范围的取反来定位您想要的字符。
这个怎么样:
select column
from table
where NOT regexp_like(column,'[ -~]');