SQL中的正则表达式

来源:互联网 发布:mysql 登录失败设置 编辑:程序博客网 时间:2024/05/16 18:32

[转自] http://blog.csdn.net/weiwenhp/article/details/6943834


当我们要进行一些简单的糊涂查询时用百分号(%),通配符(_)就可以了.其中%表达任意长度的字符串,_表示任意的某一个字符.

比如select * from emp where ename like 's%' or ename like 's_';

但如果在一些复杂的查询中关用这两个符号sql语句就会非常复杂,而且也不一定能实现.从Oracle 10g开始引入了在其他程序语言中普通使用的正则表达式.

主要有regexp_like,regexp_replace,regexp_substr,regexp_instr四个正则表达式函数.

正则表达式中的元字符:

元字符
意思
例子
    \

说明要匹配的字符是一个特殊字符、常量或者后者引用。(后引用重复上一次的匹配)

\n 匹配换行符
\\ 匹配 \
( 匹配 )^匹配字符串的开头位置^a匹配arwen.但不匹配barwen.
     $
匹配字符串的末尾位置en$匹配arwen.但不匹配arwenb.
      *
匹配前面的字符0次或多次a*rwen可以匹配rwen或aaarwen.+匹配前面的字符1次或多次a+rwen可以匹配arwen或aarwen.但不能匹配rwen.?匹配前面的字符0次或1次a?rwen可以匹配arwen或rwen.但不能匹配aarwen.{n}匹配前面的字符恰好是n次,其中n是整数ar{2}wen可以匹配arrwen.但不能匹配arwen或arrrwen.{n,m}

匹配前面的字符至少是n次,最多是m次.如果写成

{n,}表示最少匹配n次.没有上限.

ar{1,2}wen可以匹配arwen,arrwen.但不匹配awen或arrrwen..点号,匹配除null,换行以外的任意单个字符arw.n.可以匹配arwen,arwin.但不能匹配arween或arwn.(pattern)括号中pattern是一个子正则表达式,匹配指定pattern模式的一个子表达式。其实括号就像一般语言表达式中的括号.有时多加些括号可增强可读性.另外的用处见下面关于\n的描述.x|y匹配“或”x|y可以匹配x或者y[abc]可以匹配abc中的任何单个字符hello[abc]可以匹配helloa,hellob,helloc[a-z]可以匹配指定范围内的任何单个字符hell[a-z]可以匹配hello或者hellz[::]指定一个字符类,可以匹配该类中的任何字符[:alphanum:]可以匹配字符0-9、A-Z、a-z
[:alpha:]可以匹配字符A-Z、a-z
[:blank:]可以匹配空格或tab键
[:digit:]可以匹配数字0-9
[:graph:]可以匹配非空字符
[:lower:]可以匹配小写字母a-z
[:print:]与[:graph:]类似,不同之处在于[:print:]包括空格字符
[:punct:]可以匹配标点符号.,""等等
[:space:]可以匹配所有的空字符
[:upper:]可以匹配大写字母A-Z
[:xdigit:]可以匹配十六进制数字0-9、A-F、a-f\n这是对前一次匹配命中的一个后引用,其中n是一个正整数arw(en)\1可以匹配arwenen.注意\1前面必须是个加括号的子表达式.

1.regexp_like:

regexp_like(x,pattern[,match_option]),查看x是否与pattern相匹配,该函数还可以提供一个可选的参数match_option字符串说明默认的匹配选项。match_option的取值如下:
‘c’   说明在进行匹配时区分大小写(缺省值);
 'i'   说明在进行匹配时不区分大小写;
 'n'   (.)点号能表示所有单个字符,包括换行(俺还不知道什么地方有用到换行.只知道sql里面可以用chr(10)表示换行.
 'm'   字符串存在换行的时候当作多行处理.这样$就可匹配每行的结尾.不然的话$只匹配字符串最后的位置.

示例:select * from emp where regexp_like(ename,'^a[a-z]*n$');可以查找ename中以a开头以n结尾的行.例如ename为arwen或arwin或anden.但Arwen不能被匹配.因为默认是区分大小写.如果是select * from emp where regexp_like(ename,'^a[a-z]*n$','i')则可以查找ename为Arwen的行记录.

 

2.regexp_instr:

REGEXP_INSTR(x,pattern[,start[,occurrence[,return_option[, match_option]]]])用于在x中查找pattern。返回pattern在x中出现的位置。匹配位置从1开始。可以参考字符串函数 INSTR(),参数相关:
    'start'   开始查找的位置;
    'occurrence'   说明应该返回第几次出现pattern的位置;
    'return_option'   说明应该返回什么整数。若该参数为0,则说明要返回的整数是x中的一个字符的位置;若该参数为非0的整数,则说明要返回的整数为x中出现在pattern之后   的字符的位置;
    'match_option'   修改默认的匹配设置.与regexp_like里面的相同.

示例:

DECLARE     

V_RESULT INTEGER ;    

BEGIN     

  SELECT  REGEXP_INSTR('hello world','o',1,1,0) INTO  V_RESULT    

FROM  DUAL;    

 DBMS_OUTPUT.PUT_LINE(V_RESULT); 

END;

结果为5.即字母o第一个次出现的位置

如果regexp_instr('hello world','o',1,1,n)其中n为除0之外的整数.比如1,3.则结果为6.表示第一次出现字母o的后面一个字符的位置.

如果regexp_instr('hello world','o',1,2,0)则结果为9.表示第二次出现字母o的位置.

3.regexp_replace:

REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[, match_option]]]])用于在x中查找pattern,并将其替换为replae_string。可以参考字符串函数 REPLACE(),参数同REGEXP_INSTR函数

示例:

DECLARE     

V_RESULT varchar2(90);    

BEGIN     

  SELECT  REGEXP_REPLACE('hello world','o','x',1,1) INTO  V_RESULT    

FROM  DUAL;    

DBMS_OUTPUT.PUT_LINE(V_RESULT); 

END;

结果为hellx world.

如果REGEXP_REPLACE('hello world','o','x'),则结果为hellx wxrld.

如果 REGEXP_REPLACE('hello world','o','x',1,2)则结果为hello wxrld.

4.regexp_substr:

REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]])用于在x中查找pattern并返回。可以参考字符串函数 SUBSTR(),参数同REGEXP_INSTR函数.

例如:

DECLARE        

 V_RESULT VARCHAR2(255);      

BEGIN       

  SELECT  REGEXP_SUBSTR('hello world','l{2}'INTO  V_RESULT       

   FROM  DUAL;             

 DBMS_OUTPUT.PUT_LINE(V_RESULT);           

END

结果为ll

查询到匹配的字符串才返回匹配的字符.没查到就返回空.

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 b2驾照扣了分怎么办 驾驶证在外地被冒用怎么办 身份证被冒用办驾照怎么办 外国人在中国境内死了怎么办 台风来临时航船应该怎么办 越南攻占太平岛台湾怎么办 厨房下水pvc管三通漏水怎么办 pvc下水管道接口漏水怎么办 马航机场转机行李怎么办 习惯了光脚开车怎么办 遇到暴恐分子时该怎么办视频 中国人在菲律宾失踪了怎么办 高跟凉鞋前面磨脚怎么办 小孩子偷邻居家的钱怎么办 碰见美国人说叙利亚诈骗团伙怎么办 日服的火焰纹章闪退怎么办 冒险岛没潜能的怎么办 冒险岛法师运气不够怎么办 cad文件打开老是闪退白屏怎么办 上古卷轴5坏档怎么办 冒险岛2 65级后怎么办 第二次起诉离婚对方不同意怎么办 起诉离婚对方不同意离婚怎么办 我12爸妈离婚该怎么办 苹果迅雷下载的链接打不开怎么办 苹果上装的迅雷打不开怎么办 mp4进水水干了后打不开怎么办 迅雷闪退ios10.3怎么办 用辣椒辣到眼睛怎么办 辣椒辣到眼皮了怎么办 眼被辣椒辣了怎么办 老公欠银行的钱怎么办 离婚老公欠的钱怎么办 欠了几十万债怎么办 执行死刑时已怀孕怎么办 执行死刑世已经怀孕怎么办 孩子被爸爸打该怎么办 二年级的孩子逃课怎么办 龙妈和雪诺怎么办 车本扣6分怎么办 超速50扣了12分怎么办