在Oracle中,如何选择包含特定数值范围内的字符的行?

时间:2011-05-13 13:27:48

标签: regex oracle

我在Oracle中有一个表,其中包含一个名为DESCRIPTION的VARCHAR列。某些行包含不可打印的字符,例如数字值为150的字符(不是在Latin-1中,而是Unicode中的“受保护区域起点”)。

我想选择其描述列包含数字值介于128和160之间的字符的所有行。有没有办法在没有长列的LIKE子句的情况下进行OR?我想可以用正则表达式来完成,但我还没有办法做到这一点。

3 个答案:

答案 0 :(得分:5)

我最近必须做一些非常类似的事情并使用这样的SQL:

with codes as (select rownum code from dual connect by level <= 160)
select distinct t.id, t.description
from mytable t, codes c
where t.description like '%' || chr(c.code) || '%'
and c.code >= 128;

答案 1 :(得分:1)

文森特的帖子帮我解决了这个问题!我想找到所有具有任何扩展ASCII的行:128-255,所以我将语句简化为:

SELECT description
FROM your_table
WHERE regexp_like (description, '['||chr(128)||'-'||chr(255)||']');

获取范围的简短方法。

答案 2 :(得分:0)

你可以使用正则表达式,它可能比30+单个WHERE子句表现更好,但它不会更漂亮:

SELECT * 
  FROM your_table 
 WHERE regexp_like(description, '['||chr(128)||chr(129)||...||chr(160)||']')