Oracle 正则表达式函数

来源:互联网 发布:证券软件免费下载 编辑:程序博客网 时间:2024/04/28 20:46

RegExp_Like

这个是正则表达式版的LIKE。

找到名字以大写S开头,然后te,第四位是v或者ph,然后e,以n结尾的员工。

SELECT first_name, last_nameFROM hr.employeesWHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$')ORDER BY first_name, last_name;

FIRST_NAME           LAST_NAME
-------------------- -------------------------
Stephen              Stiles
Steven               King
Steven               Markle

找出姓含有重复元音的员工,查找时不区分大小写。\1表示第一个匹配项,在这里也就是一个元音,([aeiou])\1就表示重复的元音了。

SELECT last_nameFROM hr.employeesWHERE REGEXP_LIKE (last_name, '([aeiou])\1', 'i')ORDER BY last_name;

LAST_NAME
-------------------------
Bloom
De Haan
Feeney
Gee
Greenberg
Greene
Khoo
Lee

与上述SQL有所区别,下面的SQL找出含有双元音,元音可以不重复的所有员工

SELECT last_nameFROM hr.employeesWHERE REGEXP_LIKE (last_name, '([aeiou]){2}', 'i')ORDER BY last_name;

LAST_NAME
-------------------------
Austin
Baer
Baida
Bernstein
Bloom
Cabrio
Cambrault
Cambrault
Davies
De Haan
Faviet
Feeney
Fleaur
Gee
Geoni
Gietz
Greenberg
Greene
Hartstein
Kaufling
Khoo
Lee
McCain
Mourgos
Raphaely
Sciarra
Seo
Tobias
Tuvault
Weiss

RegExp_SubStr

正则表达式版的SubStr,默认情况下返回第一个符合条件的子字符串。

返回被,包含的,不包含,的字符串,该字符串最少有一个字符。

SELECT REGEXP_SUBSTR('500 Oracle Parkway, Redwood Shores, CA', ',[^,]+,') str from dual;

STR
-----------------
, Redwood Shores,

SELECT REGEXP_SUBSTR('http://www.example.com/products', 'http://([[:alnum:]]+\.?){3,4}/?') str FROM DUAL;
STR
-----------------------
http://www.example.com/

[[:alnum:]]+表示最少一个字母或数字, \.将点号转义,然后这样的组合出现3-4次。后接至多一个/

SELECT regexp_substr('abcdefg', '(\w){2}',1,2) substr FROM dual;

SU
--
cd

这里从第一个字符开始,查找第二个匹配的字符串。注意这里第二个字符串从c开始,而不是b。

RegExp_Replace

正则表达式版的Replace

COL STR FORMAT a12

SELECT REGEXP_REPLACE(phone_number,'([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})','(\1) \2-\3') str FROM hr.employees;
这条SQL转换电话号码格式。对于不匹配的电话号码,原样返回。 \1 \2 \3分别表示第一二三个匹配项。

0 0
原创粉丝点击