今天一个需求,突然让我想到了,在orcale中能不能用正则匹配数据,网上找了找,有!就做了一下笔记 方便以后查阅,和大家共同鉴赏可是又发现10g以下的版本不支持正则的函数,这样一下又让侬的心情下落一丈。不过还好在网上又找到了相关的资料:
select trim(translate('ASD45XXGG31KK/22','1234567890ASD45XXGG31KK/','1234567890')) from dual;
其它就是利用translate函数的特性进行替换,类似于replace功能。如果想做的复杂一点就偶尔用用translate函数进行嵌套,会得不一样的效果。
以下只有10g支持:
select regexp_replace('ASD45XXGG31KK/22','[^0-9]','') from dual;
select regexp_substr(regexp_replace('ASD45XXGG31KK/22','[^0-9]+','-'),'([0-9]+-?)+') from dual
找出合法的日期
SQL> select * from regexp_test
2 where regexp_like(datecol,'^([0-9]{4})-((0[1-9])|(1[0-2]))-((0[1-9])|([1-2][0-9])|(3[0-1])) (([0-1][0-9])|(2[0-3]))[0-5][0-9])[0-5][0-9])$');