Oracle 正则表达式函数

RegExp_Like

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

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

SELECT first_name, last_name
FROM hr.employees
WHERE 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_name
FROM hr.employees
WHERE 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_name
FROM hr.employees
WHERE 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值