SQL正则表达式总结

这里写目录标题

  • 一、元字符
  • 二、正则表达函数
    • [1、 `regexp_like(x,pattern[,match_option])`](#1、 regexp_like(x,pattern[,match_option]))
    • [2、 regexp_instr(x,pattern[,start[,occurrence[,return_option[, match_option]]]])](#2、 regexp_instr(x,pattern[,start[,occurrence[,return_option[, match_option]]]]))
    • [3、 REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]])](#3、 REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]]))
    • [4、 REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[, match_option]]]])](#4、 REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[, match_option]]]]))

一、元字符

当我们要进行一些简单的糊涂查询时用百分号(%),通配符(_)就可以了.其中%表达任意长度的字符串,_表示任意的某一个字符。但如果在一些复杂的查询中关用这两个符号sql语句就会非常复杂,而且也不一定能实现.从Oracle 10g开始引入了在其他程序语言中普通使用的正则表达式。主要有regexp_like(匹配),regexp_replace(替换),regexp_substr(提取),regexp_instr(包含)四个正则表达式函数。

二、正则表达函数

1、 regexp_like(x,pattern[,match_option])

含义 :查看x是否与pattern相匹配,该函数还可以提供一个可选的参数match_option字符串说明默认的匹配选项。match_option的取值如下:

  1. 'c' 说明在进行匹配时区分大小写(缺省值);

  2. 'i' 说明在进行匹配时不区分大小写;

  3. 'n' (.)点号能表示所有单个字符;

  4. 'm' 字符串存在换行的时候当作多行处理.这样 就可匹配每行的结尾 . 不然的话 就可匹配每行的结尾.不然的话 就可匹配每行的结尾.不然的话只匹配字符串最后的位置。

    select * from emp where regexp_like(ename,'^a[a-z]*n$')

    解析:
    从emp表中匹配ename字段,要求以a开头,a-z任意多个字符(包括0个),n结尾。
    例如ename为arwen或arwin或anden.但Arwen不能被匹配.因为默认是区分大小写。

    select * from emp where regexp_like(ename,'^a[a-z]*n$','i')

    可以查找ename为Arwen的行记录。

2、 regexp_instr(x,pattern[,start[,occurrence[,return_option[, match_option]]]])

含义:用于在x中查找pattern。返回pattern在x中出现的位置。匹配位置从1开始。可以参考字符串函数 INSTR(),参数相关:

  1. 'start' 开始查找的位置;

  2. 'occurrence' 说明应该返回第几次出现pattern的位置;

  3. 'return_option' 说明应该返回什么整数。若该参数为0,则说明要返回的整数是x中的一个字符的位置;若该参数为非0的整数,则说明要返回的整数为x中出现在pattern之后的字符的位置;

  4. 'match_option' 修改默认的匹配设置。与regexp_like里面的相同。

    SELECT REGEXP_INSTR('hello world','o',1,1,0);
    ==》5

    解析:
    查找o在hello word中第一次出现的位置。
    start=1,occurrence=1,return_option=0

    SELECT REGEXP_INSTR('hello world','o',1,1,1);
    ==》6

    查找o在hello word中第一次出现后的字符的位置,这里return_option=1也可以等于其他非0整数。

    SELECT REGEXP_INSTR('hello world','o',1,2,0);
    ==》8

    查找o在hello word中第二次出现的位置(空格也属于一个字符位置)。

3、 REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]])

**含义:**用于在x中查找pattern并返回。可以参考字符串函数 SUBSTR(),参数同REGEXP_INSTR函数。

复制代码
SELECT REGEXP_SUBSTR('hello world','l{2}');            
==》ll

解析:
查询到匹配的字符串才返回匹配的字符.没查到就返回空。

4、 REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[, match_option]]]])

含义:用于在x中查找pattern,并将其替换为replae_string。可以参考字符串函数 REPLACE(),参数同REGEXP_INSTR函数。

REPLACE(String,from_str,to_str) 即:将String中所有出现的from_str替换为to_str。注意:from_str不能是空字符串 ('')。

复制代码
SELECT REGEXP_REPLACE('hello world','o','x',1,1);            
==》hellx world

解析:
start=1,occurrence=1。

SELECT REGEXP_REPLACE('hello world','o','x');            
==》hellx wxrld

SELECT REGEXP_REPLACE('hello world','o','x',1,2);            
==》hello wxrld
相关推荐
灰太狼!!20 分钟前
数仓、接口开发常用clickhouses函数详解
数据仓库·sql·clickhouse
我是一颗柠檬36 分钟前
【MySQL全面教学】MySQL基础与环境搭建Day1(2026年)
数据库·后端·sql·mysql·database
我是一颗柠檬36 分钟前
【MySQL全面教学】MySQL数据类型详解Day2(2026年)
数据库·后端·sql·mysql·database
芯芯点灯38 分钟前
gd32f303烧录提示Flash Timeout. Reset the Target and try it again.;
开发语言·前端·javascript
前端若水38 分钟前
自定义消息组件:图片、文件附件与图表
前端·人工智能·react.js·typescript
2601_9584925543 分钟前
7 Best WordPress Tools to Help Your News Site Actually Make Money
前端·word
放下华子我只抽RuiKe51 小时前
React 从入门到生产(七):性能优化实战
前端·javascript·人工智能·react.js·性能优化·前端框架·github
糯米团子7491 小时前
vue知识点复习
前端·vue.js
DBdoctor官方1 小时前
2026 DBA实测推荐:5款数据库管理工具 监控、SQL审核、AI能力横评
数据库·sql·dba
晚烛1 小时前
CANN 日志系统:调试与性能分析的日志艺术
前端·chrome·数据挖掘