Oracle数据库REGEXP_LIKE匹配特殊字符返回全表行求修正
Oracle REGEXP_LIKE 匹配特殊字符的正确写法
你的问题出在正则里的元字符未转义:*、?、[、]是正则的特殊符号,直接写会被当作匹配规则而非字面字符。比如单独的*会匹配任意内容,导致返回全表数据。
正确的正则写法需要对这些元字符进行转义,Oracle中用反斜杠\转义(多数场景下单反斜杠即可):
REGEXP_LIKE(DESCRIPTION, '(&|\*|>=|;|\?| |\[|\])')
也可以用字符类简化写法,字符类里的部分元字符无需转义:
REGEXP_LIKE(DESCRIPTION, '>=| |[&*;?\[\]]')
各部分说明:
\*:匹配字面量*\?:匹配字面量?\[/\]:匹配字面量[/]>=:直接匹配>=字符串:匹配连续两个空格&、;:非元字符,可直接在正则中使用
完整查询示例:
SELECT * FROM your_table_name WHERE REGEXP_LIKE(DESCRIPTION, '>=| |[&*;?\[\]]');
内容的提问来源于stack exchange,提问作者JGH_PC
相关产品推荐
相关产品推荐

