有时候需要以特定的字符(如,/ *等)分割字符串,取出分割后的第几个子字符串,这时,可以用Oracle的正则表达式。
例如有个字符串'/孟硕/保红燕/小二黑/花无缺',我们想取出'/'分割后的第三个子字符串'小二黑':
SQL>select regexp_substr('/孟硕/保红燕/小二黑/花无缺','[^/]+',1,3) res from dual;
即可得到'小二黑'。
上面的参数1:'/孟硕/保红燕/小二黑/花无缺'为待分割的目标字符串;
上面的参数2:'[^/]+'表示除去'/'字符的剩余的多个字符,'^'表示否的意思,+表示一到多个字符;
上面的参数3:1表示从目标字符串的第一个字符开始;
上面的参数4:3表示分割后得到的第三个子字符串。
Another example:想从'代晓燕/保红燕*&/张燕!三只燕'字符串中得到第二个'保红燕'可以用如下SQL:
SQL>select regexp_substr('代晓燕/保红燕*&/张燕!三只燕','[^/*&!]+',1,2) res from dual