【问题标题】:Oracle REGEXP_LIKE find vertical tab 0xb characterOracle REGEXP_LIKE 查找垂直制表符 0xb 字符
【发布时间】:2019-07-03 14:44:08
【问题描述】:

试图在 CLOB 字段中查找垂直制表符。使用不支持十六进制字符输入的 regexp_like。 所以这是无效的 和 REGEXP_LIKE(,'[\xB]','i') Posix 条目似乎没有帮助,因为 :cntl: 包括在我的场景中有效的回车/换行等项目。

【问题讨论】:

  • 正则表达式可以简单地是chr(9)(不在引号中)。在你的尝试中,最后的“i”是什么?那是为了不区分大小写的搜索;这不适用于控制字符。
  • 我想你的意思是chr(11)
  • 正确的 ASCII 码是什么;我希望 OP 能够自己找出答案。

标签: sql regex oracle regexp-like


【解决方案1】:

在 Oracle 中有两种指定非打印字符的标准方法 - chr() 用于 8 位代码页,unistr() 用于 UTF-16。这是一个显示它们的示例(垂直选项卡对于 8 位是十进制 11,对于 UTF-16 是 \000B)。

with test as (select to_clob(unistr('\000B')) as str from dual)
select 'Found' from test
where regexp_like(str, chr(11),'i'); -- case insensitivity doesn't matter unless you're using letters

【讨论】:

    【解决方案2】:

    你也可以考虑在里面使用asciistr()函数

    regexp_like(clob_, asciistr(chr(to_number('0B','xx')))) 检测clob_列中是否存在至少一个vertical tab character(十进制:11,十六进制:0B 字符:^K

    select id
      from tab
     where regexp_like(clob_, asciistr(chr(to_number('0B','xx'))))
    

    Demo

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 2015-05-30
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多