Oracle 11g中如何用REGEXP_LIKE查找回车、换行和制表符?
在Oracle 11g中查找含回车、换行或制表符的行
问题原因分析
你之前的两种写法都存在问题:
- 第一种用
'[\r\n\t]':Oracle的REGEXP_LIKE不支持这类转义序列,\r、\n、\t会被当成普通字符(比如\r会被解析为反斜杠加字母r,而非回车符),自然匹配不到目标行。 - 第二种用
'[chr(10)|chr(13)]':这里的chr(10)是字符串的一部分,不是函数调用,Oracle会尝试匹配字符串chr(10)里的单个字符,而不是换行符,所以结果不符合预期。
正确解法
方法1:使用正则表达式(REGEXP_LIKE)
需要把CHR()函数的结果拼接进正则表达式的字符类中,让Oracle识别这些特殊字符:
SELECT c1 FROM table_name WHERE REGEXP_LIKE(c1, '[' || CHR(10) || CHR(13) || CHR(9) || ']');
其中:
CHR(10):代表换行符CHR(13):代表回车符CHR(9):代表制表符
方法2:使用INSTR函数(性能更优)
如果不需要正则的复杂匹配,用INSTR直接检查字符存在性会更高效:
SELECT c1 FROM table_name WHERE INSTR(c1, CHR(10)) > 0 OR INSTR(c1, CHR(13)) > 0 OR INSTR(c1, CHR(9)) > 0;
INSTR返回目标字符在字符串中的位置,返回值大于0说明该字符存在。
内容的提问来源于stack exchange,提问作者rodneyc8063
相关产品推荐
相关产品推荐

