【问题标题】:Oracle SQL -Find strings that have a character from ASCII 0 to ASCII 32 and above ASCII 128Oracle SQL - 查找字符从 ASCII 0 到 ASCII 32 及以上 ASCII 128 的字符串
【发布时间】:2018-03-07 06:04:06
【问题描述】:

我的表格中有一些条目包含非打印字符。我尝试编写一个简单的脚本在 Oracle DB 上执行 -

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

但这甚至可以匹配带有多个空格的字符串。但是空格是可以的。

什么是最好的查询?

【问题讨论】:

    标签: sql oracle regexp-like


    【解决方案1】:

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

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

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

    Demo

    【讨论】:

    • 我试过这个查询 - 我得到一个缺少括号的问题。我尝试将整个条件放在一个括号中。但我没有得到所需的记录
    • @PrateekNarendra 抱歉...我现在无法测试我的答案。请再试一次。
    【解决方案2】:

    这个呢:

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

    【讨论】:

      猜你喜欢
      • 2013-11-17
      • 2012-08-02
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      相关资源
      最近更新 更多