Oracle REGEXP_LIKE 找到垂直制表符 0xb 字符
Oracle REGEXP_LIKE find vertical tab 0xb character
正在尝试在 CLOB 字段中查找垂直制表符。使用不支持输入十六进制字符的 regexp_like。
所以这是无效的
和 REGEXP_LIKE(,'[\xB]','i')
Posix 条目似乎没有帮助,因为 :cntl: 包括在我的场景中有效的运输 return/new 行之类的项目。
在 Oracle 中有两种指定 non-printing 字符的标准方法 - chr()
用于 8 位代码页,unistr()
用于 UTF-16。这是一个显示它们的示例(8 位的垂直制表符是十进制 11,UTF-16 的制表符是 \000B)。
with test as (select to_clob(unistr('[=10=]0B')) 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
您也可以考虑在
中使用asciistr()
函数
regexp_like(clob_, asciistr(chr(to_number('0B','xx'))))
检测[=]中是否至少存在一个vertical tab character
(十进制:11
,十六进制:0B
,字符:^K
) 17=]列
select id
from tab
where regexp_like(clob_, asciistr(chr(to_number('0B','xx'))))
正在尝试在 CLOB 字段中查找垂直制表符。使用不支持输入十六进制字符的 regexp_like。 所以这是无效的 和 REGEXP_LIKE(,'[\xB]','i') Posix 条目似乎没有帮助,因为 :cntl: 包括在我的场景中有效的运输 return/new 行之类的项目。
在 Oracle 中有两种指定 non-printing 字符的标准方法 - chr()
用于 8 位代码页,unistr()
用于 UTF-16。这是一个显示它们的示例(8 位的垂直制表符是十进制 11,UTF-16 的制表符是 \000B)。
with test as (select to_clob(unistr('[=10=]0B')) 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
您也可以考虑在
中使用asciistr()
函数
regexp_like(clob_, asciistr(chr(to_number('0B','xx'))))
检测[=]中是否至少存在一个vertical tab character
(十进制:11
,十六进制:0B
,字符:^K
) 17=]列
select id
from tab
where regexp_like(clob_, asciistr(chr(to_number('0B','xx'))))