美文网首页程序园
Oracle SQL 学习笔记17 - 正则表达式

Oracle SQL 学习笔记17 - 正则表达式

作者: 赵阳_c149 | 来源:发表于2020-02-06 20:33 被阅读0次

在SQL语句中可以使用正则表达式来搜索、匹配和替换字符。
Oracle 数据库从以下三方面支持正则表达式:

  1. SQL和PL/SQL的字符类型支持多语言
  2. 为查找和操作字符串提供了可以描述简单和复杂模式的方法。
  3. 提供了一些新的函数以支持正则表达式

正则表达式函数

函数名称 描述
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...

相关文章

网友评论

    本文标题:Oracle SQL 学习笔记17 - 正则表达式

    本文链接:https://www.haomeiwen.com/subject/oluuxhtx.html