Oracle 正则表达式

-- Start

大家对 LIKE 语句应该都很熟悉,它是用来做模糊查询的。Oracle 还提供了 REGEXP_LIKE,让我们可以通过正则表达式来做模糊查询,下面是一个简单的例子。

CREATE TABLE EMPLOYEE
(
  ID   NUMBER(10),
  NAME    VARCHAR2(20),
  EMAIL   VARCHAR2(60)
);
INSERT INTO EMPLOYEE VALUES (1, 'zhang san', 'san.zhang@163.com;san.zhang@qq.com');
INSERT INTO EMPLOYEE VALUES (2, 'wang mazi', 'mazi.wang@163.com');

假设让你查找一下姓 zhang 的员工,注意 zhang 不区分大小写,怎么办?我们可以使用 LIKE, 也可以使用 REGEXP_LIKE。

SELECT * FROM EMPLOYEE WHERE UPPER(NAME) LIKE 'ZHANG%';
SELECT * FROM EMPLOYEE WHERE REGEXP_LIKE(NAME, '^zhang.*$', 'i');

如果你还不熟悉正则表达式,请参考本人另一系列文章“ 正则表达式精萃”。上面的 i 指的是匹配模式,Oracle 支持如下的匹配模式。可以指定多个匹配模式的哦。

i    表示不区分大小写
c    表示区分大小写
n    单行模式,也叫点号通配模式
m    多行模式,又称增强的行锚点模式
x    注释模式

除此之外,Oracle 还提供了以下几个支持正则表达式的函数,用来对字符串进行操作。

REGEXP_SUBSTR               通过正则表达式查找子字符串  
REGEXP_INSTR                通过正则表达式查找子字符串的位置  
REGEXP_COUNT                通过正则表达式查找子字符串的数量  
REGEXP_REPLACE              通过正则表达式替换

下面是一个简单的例子。

-- 查找第一个 EMAIL 地址
SELECT NAME, REGEXP_SUBSTR(EMAIL,'^[^;]+;?') FROM EMPLOYEE;

-- 查找第一个 EMAIL 地址
SELECT NAME, REGEXP_REPLACE(EMAIL,';.*$') FROM EMPLOYEE;

-- 查找 ; 的位置
SELECT NAME, REGEXP_INSTR(EMAIL,';') FROM EMPLOYEE;

-- 查找 @ 的数量
SELECT NAME, REGEXP_COUNT(EMAIL,'@') FROM EMPLOYEE;

--更多参见:Oracle SQL 精萃

-- 声明:转载请注明出处

-- Last edited on 2015-02-26

-- Created by ShangBo on 2015-02-25

-- End


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值