Oracle SQL中Regexp_Substr大小写匹配及替代%的相关问题
Oracle正则表达式相关问题解答
1. 让REGEXP_SUBSTR支持大小写混合匹配的写法
Oracle的REGEXP_SUBSTR可通过第五个参数指定匹配模式,传入'i'即可开启不区分大小写匹配。另外注意你原语句里的函数名拼写错误(regexp_susbtr应为regexp_substr),同时可以调整正则表达式更贴合需求:
select a.*, regexp_substr(comment, '(i?mmig+\w*)|(imig+\w*)', 1, 1, 'i') as selected from customer a where lower(comment) like '%imm%g%' or lower(comment) like '%im%g%';
说明:
- 第五个参数
'i'表示忽略大小写 - 正则
(i?mmig+\w*)|(imig+\w*)精准匹配imm/im开头、后续带g的单词 - 第三个参数
1代表从字符串第1位开始匹配,第四个参数1代表返回第1个匹配结果
2. REGEXP_LIKE语句与LIKE语句的等价性判断
是的,where regexp_like(comment, 'immig|imig','i') 和修正语法后的以下语句等价:
where lower(comment) like '%immig%' or lower(comment) like '%imig%';
两者都用于匹配comment字段中包含immig或imig子串的记录,且均不区分大小写。
3. Oracle正则中替代LIKE里%的写法
在Oracle的REGEXP_SUBSTR和REGEXP_LIKE中,用.*替代LIKE里的%:
.*:匹配任意长度的任意字符(包括0个字符,完全对应%的功能)- 若需匹配至少一个任意字符,则用
.+(类似LIKE中多个_的组合,但_仅匹配单个字符)
比如要匹配m和g之间有任意字符,正则可写为m.*g(需忽略大小写则加'i'模式)。
内容的提问来源于stack exchange,提问作者Lizzie
相关产品推荐
相关产品推荐

