Oracle 正则表达式函数

来源:互联网 发布:系统api编程 编辑:程序博客网 时间:2024/05/01 02:45

Oracle 中的正则表达式函数:
1)
REGEXP_LIKE(x,pattern[,match_option])用于在x中查找正则表达式pattern,该函数还可以提供一个可选的参数match_option字符串说明默认的匹配选项。match_option的取值如下:
  'c'   说明在进行匹配时区分大小写(缺省值);
  'i'   说明在进行匹配时不区分大小写;
  'n'   允许使用可以匹配任意字符的操作符;
  'm'   将x作为一个包含多行的字符串。
for example:
SQL> select 1 from dual where REGEXP_LIKE('7:30 a.m','[[:digit:]]+');

         1
----------
         1
2)
REGEXP_INSTR(x,pattern[,start[,occurrence[,return_option[, match_option]]]])用于在x中查找pattern。返回pattern在x中出现的位置。
    'start'   开始查找的位置;
    'occurrence'   说明应该返回第几次出现pattern的位置;
    'eturn_option'   说明应该返回什么整数。若该参数为0,则说明要返回的整数是x中的一个字符的位置;若该参数为非0的整数,
    则说明要返回的整数为x中出现在pattern之后的字符的位置;
for example:
SQL> select REGEXP_INSTR('7:30 a.m','[[:digit:]]+',1,2) from dual;

REGEXP_INSTR('7:30A.M','[[:DIGIT:]]+',1,2)
------------------------------------------
                                         3
                                        
SQL> select REGEXP_INSTR('7:30 a.m','[[:digit:]]+',1,1) from dual;

REGEXP_INSTR('7:30A.M','[[:DIGIT:]]+',1,1)
------------------------------------------
                                         1
3)
REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[, match_option]]]])用于在x中查找pattern,并将其替换为replae_string                                        
for example:
SQL> select REGEXP_REPLACE('7:30 a.m','[[:digit:]]+','40',1,2) from dual;

REGEXP_REPLACE('7:30A.M','[[:DIGIT:]]+','40',1,2)
--------------------------------------------------------------------------------
7:40 a.m

4)
REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]])用于在x中查找pattern并返回。可以参考字符串函数 SUBSTR(),参数同REGEXP_INSTR函数
for example
SQL> select NVL(REGEXP_SUBSTR('12:30 a.m','[[:digit:]]+',1,2),'00') from dual;

NVL(REGEXP_SUBSTR('12:30A.M','[[
--------------------------------
30
   
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。

 

一个小例子:

select
CASE WHEN REGEXP_LIKE('7:30 a.m','[[:digit:]]+') THEN
     CASE
      WHEN REGEXP_SUBSTR('7:30 a.m','[[:digit:]]+') <= 12 THEN
        TO_CHAR(TO_DATE(REGEXP_SUBSTR('7:30 a.m','[[:digit:]]+') || ':' || NVL(REGEXP_SUBSTR('7:30 a.m','[[:digit:]]+',1,2),'00') ||
        CASE WHEN lower('7:30 a.m') like '%p%' THEN ' PM' ELSE ' AM' END,  'HH:MI PM'), 'HH24MISS')
     ELSE
        REGEXP_SUBSTR('7:30 a.m','[[:digit:]]+') || NVL(REGEXP_SUBSTR('7:30 a.m','[[:digit:]]+',1,2),'00') || '00'
     END
ELSE '000000'
END AS DD
from dual;

原创粉丝点击