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', '[email protected];[email protected]');
INSERT INTO EMPLOYEE VALUES (2, 'wang mazi', '[email protected]');

假设让你查找一下姓 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


你可能感兴趣的:(oracle,sql,plsql)