在SQL语句中可以使用正则表达式来搜索、匹配和替换字符。
Oracle 数据库从以下三方面支持正则表达式:
- SQL和PL/SQL的字符类型支持多语言
- 为查找和操作字符串提供了可以描述简单和复杂模式的方法。
- 提供了一些新的函数以支持正则表达式
正则表达式函数
函数名称 | 描述 |
---|---|
REGEXP_LIKE | 和 LIKE 操作类似,但是进行的是基于正则表达式的匹配而不是简单匹配 |
REGEXP_REPLACE | 查找某一个正则表达式模式,并将其替换为指定字符串 |
REGEXP_INSTR | 在一个给定字符串中查找正则表达式模式,如果找到的化,返回位置 |
REGEXP_SUBSTR | 在给定字符串内查找一个正则表达式模式,并将匹配的子字符串返回 |
REGEXP 函数语法
REGEXP_LIKE (srcstr, pattern [,match_option])
REGEXP_INSSTR (srcstr, pattern [, postion [,
occurrence [, return_option, [, match_option]]]])
REGEXP_SUBSTR (srcstr, pattern [, position
[, occurrence [, match_option]]])
REGEXP_REPLACE(srcstr, pattern [, replacestr [, position
[, occurrence [, match_option]]]])
进行简单搜索
SELECT first_name, last_name
FROM employees
WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$');
匹配字符串位置
SELECT street_address,
REGEXP_INSTR(street_address, '[^[:alpha:]]')
FROM locations
WHERE
REGEXP_INSTR(street_address, '[^[:alpha:]]') > 1
提取子串
SELECT REGEXP_SUBSTR(street_address, ' [^ ]+ ')
"Road" FROM locations;
替换
SELECT REGEXP_REPLACE( country_name, '(.)',
'\1 ') "REGEXP_REPLACE"
FROM countries;
正则表达式用于约束校验
ALTER TABLE emp8
ADD CONSTRAINT email_addr
CHECK(REGEXP_LIKE(email, '@')) NOVALIDATE;
INSERT INTO emp8 VALUES
(500, 'Christian', 'Patel',
'ChrisP2creme.com', 1234567890,
'12-Jan-2004', 'HR_REP', 2000, null, 102, 40);
ERROR at line1
ORA-02290, check constraint...
网友评论