一、语法
REGEXP_SUBSTR函数格式如下:
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr :需要进行正则处理的字符串
__pattern :进行匹配的正则表达式
__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)
二、案例
--1、查询使用正则分割后的第一个值,也就是34 SELECT REGEXP_SUBSTR('34,56,-23','[^,]+',1,1,'i') AS STR FROM DUAL; --结果是:34 --2、查询使用正则分割后的最后一个值,也就是-23 SELECT REGEXP_SUBSTR('34,56,-23','[^,]+',1,3,'i') AS STR FROM DUAL; --结果是:-23 --3、获取一个多个数值的列,从而能够让结果以多行的形式展示出来 SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=7; --结果是: --1 --2 --3 --4 --5 --6 --7 --4、将上面REGEXP_SUBSTR的occurrence关联 SELECT NVL(REGEXP_SUBSTR('34,56,-23', '[^,]+', 1, LEVEL, 'i'), 'NULLL') AS STR FROM DUAL CONNECT BY LEVEL <= 7; --结果是: --34 --56 ---23 --null --null --mull --null --5、优化上面的SQL语句,让生成的行的数量符合实际情况 SELECT REGEXP_SUBSTR('34,56,-23', '[^,]+', 1, LEVEL, 'i') AS STR FROM DUAL CONNECT BY LEVEL <= LENGTH('34,56,-23') - LENGTH(REGEXP_REPLACE('34,56,-23', ',', '')) + 1; --结果是: --34 --56 ---23
三、本人项目遇到的案例
将文件后缀名.jpg不规则的文件进行查询且修复;
1、查询
select concat(regexp_substr(filefuxx,'[^.jpg]+',1,1,'i'),'.jpg') from testjpg where filefuxx like '%jpg%' and filefuxx not like '%jpg';
2、更新
update testjpg set filefuxx=concat(regexp_substr(filefuxx,'[^.jpg]+',1,1,'i'),'.jpg') where filefuxx like '%jpg%' and filefuxx not like '%jpg';