ORACLE正则表达式函数

一、REGEXP_LIKE--查找与正则表达式匹配的字符串。

语法:REGEXP_LIKE(source_char, pattern[, match_param ])


二、REGEXP_COUNT--计算模式在源串中出现的次数

语法:REGEXP_COUNT (source_char, pattern [, position [, match_param]])


三、REGEXP_INSTR--返回模式在源串中的位置

语法:REGEXP_INSTR (source_char, pattern
              [, position
                 [, occurrence
                    [, return_opt
                       [, match_param
                          [, subexpr]
                       ]
                    ]
                 ]
              ]

四、REGEXP_SUBSTR--返回模式

语法:REGEXP_SUBSTR(source_char, pattern
              [, position
                 [, occurrence
                    [, match_param
                       [, subexpr
                       ]
                    ]
                 ]
              ]
             )

五、REGEXP_REPLACE--替换源串中的文本

语法:REGEXP_REPLACE(source_char, pattern
               [, replace_string
                  [, position
                     [, occurrence
                        [, match_param ]
                     ]
                  ]
               ]
              )


  source_char:要搜索的字段。

  pattern:正则表达式。

  position:是一个正整数,表明oracle从源串左侧第几个位置开始搜索,可选,默认是1。

  occurrence:第几次出现,可选。

  return_opt:0代表开始位置,1代码结束位置。默认是0,可选。

  match_param:匹配的参数,可选。

  subexpr:子表达式,11g后开始支持此参数选项。可选。

  replace_string:替换文本。


    i:不区分大小写。
    c:区分大小写。
    n:允许句点(.)作为通配符去匹配换行符。如果省略该参数,则句点将不匹配换行符。。
    m:将source_char作为一个包含多行的字符串。
    x:忽略空白字符,默认情况下空白字符匹配自身。

 如果复合参数设置有矛盾,则oracle默认选后面的参数,如'ic',则默认区分大小写。
 如果指定的参数不是oracle在上述所定义的,则oracle返回一个错误。

如果省略了match_param参数,则:

 1.区分大小写是由nls_sort参数的值决定的(此参数的默认值BINARY是区分大小写的)。

 SQL> conn /as sysdba
 已连接。

 SQL> select * from v$nls_parameters where parameter ='NLS_SORT';

 PARAMETER                       VALUE
 ------------------------------- -------------------------------
 NLS_SORT                        BINARY

 SQL> select * from chn.fzq where regexp_like(chn.fzq.value,'^1[2b]');

 ID   VALUE
 ---- ----------
 1    1234560
 2    1234560
 3    1b3b560
 7    123  45
 1    1234560 

 已选择5行

 SQL>  ALTER SESSION SET NLS_SORT='BINARY_CI';

 会话已更改

 SQL> select * from chn.fzq where regexp_like(chn.fzq.value,'^1[2b]');

 ID   VALUE
 ---- ----------
 1    1234560
 2    1234560
 3    1b3b560
 7    123  45
 10   1B
 1    1234560

 已选择6行。

 2.句点不匹配换行符。

 3.source_char被视为单行。


Examples:

 1、REGEXP_LIKE:

 SQL> SELECT first_name, last_name
      FROM employees
      WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$')
      ORDER BY first_name, last_name;

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


 2、REGEXP_COUNT:

 SQL> SELECT REGEXP_COUNT('123123123123123', '(12)3', 1, 'i') REGEXP_COUNT
      FROM DUAL;
 
 REGEXP_COUNT
 ------------
     5

 
 3、REGEXP_INSTR:

 SQL>SELECT
     REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA','[^ ]+', 1, 6) "REGEXP_INSTR"
     FROM DUAL;

 REGEXP_INSTR
 ------------
    37

 4、REGEXP_SUBSTR:

 SQL>SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 1) "REGEXP_SUBSTR"
     FROM DUAL;

 REGEXP_SUBSTR
 -------------------
 123

 5、REGEXP_REPLACE:

  SQL>SELECT
  REGEXP_REPLACE(phone_number,
                 '([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})',
                 '(\1) \2-\3') "REGEXP_REPLACE"
  FROM employees
  ORDER BY "REGEXP_REPLACE";

REGEXP_REPLACE
--------------------------------------------------------------------------------
(515) 123-4444
(515) 123-4567
(515) 123-4568
(515) 123-4569
(515) 123-5555
. . .

你可能感兴趣的:(oracle)