ITPub博客

首页 > 数据库 > Oracle > Oracle使用正则表达式

Oracle使用正则表达式

Oracle 作者:rovige 时间:2015-07-23 11:55:18 0 删除 编辑

Oracle使用正则表达式

1。regexp_like

2。regexp_substr

3。regexp_instr

4。regexp_replace


regexp_like 只能用于条件表达式,和 like 类似,但是使用的正则表达式进行匹配,语法很简单:

regexp_like_condition

regexp_substr 函数,和 substr 类似,用于拾取合符正则表达式描述的字符子串,语法如下:

regexp_substr

regexp_instr 函数,和 instr 类似,用于标定符合正则表达式的字符子串的开始位置,语法如下:

regexp_instr

regexp_replace 函数,和 replace 类似,用于替换符合正则表达式的字符串,语法如下:

regexp_replace

这里解析一下几个参数的含义:

1。source_char,输入的字符串,可以是列名或者字符串常量、变量。

2。pattern,正则表达式。

3。match_parameter,匹配选项。

取值范围: i:大小写不敏感; c:大小写敏感;n:点号 . 不匹配换行符号;m:多行模式;x:扩展模式,忽略正则表达式中的空白字符。

4。position,标识从第几个字符开始正则表达式匹配。

5。occurrence,标识第几个匹配组。

6。replace_string,替换的字符串。



例子:

--1、查询使用正则分割后的第一个值,也就是17
SELECT REGEXP_SUBSTR('34,56,-23','[^,]+',1,1,'i') AS STR FROM DUAL;
--结果是:34

--2、查询使用正则分割后的最后一个值,也就是23SELECT REGEXP_SUBSTR('34,56,-23','[^,]+',1,3,'i') AS STR FROM DUAL;
--结果是:-23

--3、获取一个多个数值的列,从而能够让结果以多行的形式展示出来
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=7;
--结果是:level
1234567

--4、将上面REGEXP_SUBSTR的occurrence关联
SELECT NVL(REGEXP_SUBSTR('34,56,-23', '[^,]+', 1, LEVEL, 'i'), 'NULLL') AS STR  
  FROM DUAL  
CONNECT BY LEVEL <= 7;
--结果是:
str
34
56
-23
null
null
mull
null
--5、优化上面的SQL语句,让生成的行的数量符合实际情况
SELECT REGEXP_SUBSTR('34,56,-23', '[^,]+', 1, LEVEL, 'i') AS STR
  FROM DUAL
CONNECT BY LEVEL <=
           LENGTH('34,56,-23') - LENGTH(REGEXP_REPLACE('34,56,-23', ',', '')) + 1;
--结果是:
34
56
-23

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/18900329/viewspace-1745476/,如需转载,请注明出处,否则将追究法律责任。

上一篇: HTTP协议状态码
请登录后发表评论 登录
全部评论

注册时间:2015-07-09

  • 博文量
    21
  • 访问量
    67375