REGEXP函数
常用的regexp函数
1,REGEXP_LIKE() :与LIKE的功能相似
2,REGEXP_INSTR():与INSTR的功能相似,返回发现指定的字符的位置。
3,REGEXP_SUBSTR() :与SUBSTR的功能相似
4,REGEXP_REPLACE():与REPLACE的功能相似
5,REGEXP_COUNT():计算一个字符串出现在另一个字符串的次数。(Oracle的11g引入此函数。)
数据准备
-- 创建表
CREATE TABLE TMP_FZQ
(
ID VARCHAR(4),
VALUE VARCHAR(10)
);
-- 数据插入
INSERT INTO TMP_FZQ VALUES ('1','1234560');
INSERT INTO TMP_FZQ VALUES ('2','1234560');
INSERT INTO TMP_FZQ VALUES ('3','1b3b560');
INSERT INTO TMP_FZQ VALUES ('4','abc');
INSERT INTO TMP_FZQ VALUES ('5','abcde');
INSERT INTO TMP_FZQ VALUES ('6','ADREasx');
INSERT INTO TMP_FZQ VALUES ('7','123 45');
INSERT INTO TMP_FZQ VALUES ('8','adc de');
INSERT INTO TMP_FZQ VALUES ('9','adc,.de');
INSERT INTO TMP_FZQ VALUES ('10','1B');
INSERT INTO TMP_FZQ VALUES ('10','abcbvbnb');
INSERT INTO TMP_FZQ VALUES ('11','11114560');
INSERT INTO TMP_FZQ VALUES ('11','11124560');
示例
REGEXP_LIKE()
SQL> SELECT * FROM TMP_FZQ WHERE REGEXP_LIKE(VALUE,'6'); -- 筛选出包含6的数据
ID VALUE
---- ----------
1 1234560
2 1234560
3 1b3b560
11 11114560
11 11124560
SQL> SELECT * FROM TMP_FZQ WHERE REGEXP_LIKE(VALUE,'[A-Z]'); -- 筛选出包含大写字母的数据
ID VALUE
---- ----------
6 ADREasx
10 1B
REGEXP_INSTR()
SQL> SELECT ID,VALUE,REGEXP_INSTR(VALUE,'(45)') COL FROM TMP_FZQ;
ID VALUE COL
---- ---------- ----------
1 1234560 4
2 1234560 4
3 1b3b560 0
4 abc 0
5 abcde 0
6 ADREasx 0
7 123 45 5
8 adc de 0
9 adc,.de 0
10 1B 0
10 abcbvbnb 0
11 11114560 5
11 11124560 5
13 rows selected
REGEXP_SUBSTR()
SQL> SELECT * FROM TMP_FZQ WHERE REGEXP_SUBSTR(VALUE,'[1-6]{6}') = '123456';
ID VALUE
---- ----------
1 1234560
2 1234560
SQL> SELECT REGEXP_SUBSTR(VALUE,'(123)(60)',1,1,'i',1) col FROM TMP_FZQ;
COL
--------------------
13 rows selected
REGEXP_REPLACE()
SQL> SELECT ID,VALUE,REGEXP_REPLACE(VALUE,'[0-9]','') COL FROM TMP_FZQ;
ID VALUE COL
---- ---------- --------------------------------------------------------------------------------
1 1234560
2 1234560
3 1b3b560 bb
4 abc abc
5 abcde abcde
6 ADREasx ADREasx
7 123 45
8 adc de adc de
9 adc,.de adc,.de
10 1B B
10 abcbvbnb abcbvbnb
11 11114560
11 11124560
13 rows selected
REGEXP_COUNT()
SQL> SELECT ID,VALUE,REGEXP_COUNT(VALUE,'[0-9]') COL FROM TMP_FZQ;
ID VALUE COL
---- ---------- ----------
1 1234560 7
2 1234560 7
3 1b3b560 5
4 abc 0
5 abcde 0
6 ADREasx 0
7 123 45 5
8 adc de 0
9 adc,.de 0
10 1B 1
10 abcbvbnb 0
11 11114560 8
11 11124560 8
13 rows selected
参考文章
Oracle中RegExp_Like 正则表达式基本用法 - IT情深 - 博客园 (cnblogs.com)
ORACLE REGEXP_LIKE 特殊转义字符 - CSDN文库
Oracle 正则表达式详解(regexp_substr、regexp_instr、regexp_replace、regexp_like、regexp_count)-CSDN博客