最近执行以下sql时,报“ora-12725 正则表达式中的圆括号不配对”错
select * from T_S_BBD_WORLDPORT t
where length(regexp_substr('111爱尔兰111',t.itemname)) >0 ';
怀疑是正则表达式关键字括号导致,于是执行
select 1 from dual t
where length(regexp_substr('111福克兰群岛(马尔维纳斯)111','福克兰群岛(马尔维纳斯)')) >0 ;
发现不报错也没有结果,但是执行
select 1 from dual t
where length(regexp_substr('111福克兰群岛(马尔维纳斯)111','福克兰群岛(马尔维纳斯)')) >0 ;
会报错。
换成标准写法
select 1 from dual t
where length(regexp_substr('111福克兰群岛(马尔维纳斯)111','福克兰群岛\(马尔维纳斯\)')) >0 ;
有返回结果。
结论:regexp_substr无法代替like '%string%'
select 1 from dual t where '111福克兰群岛(马尔维纳斯)111' like '%福克兰群岛(马尔维纳斯)%' ;