sql中正则表达式的使用

1. sql中的正则表达式概述

SQL中可以使用like %进行模糊匹配。
在一些稍复杂的查询场景中,sql也支持正则表达式的匹配,Mysql中使用REGEXP操作符进行正则表达式的匹配。

  • 正则模式
分类正则模式描述说明
定位元字符^匹配开头
$匹配结尾
表达式的替换匹配和分组.匹配除 “\n” 之外的任何单个字符
[.\n]匹配任意单个字符
[abc]匹配所包含的字符集合中的任意单个字符
[^abc]匹配所包含的字符集合之外的任意单个字符
(ab
( )标记一个子表达式的开始和结束位置。
量词或重复操作符*匹配前面的子表达式零次或多次
?匹配 0 次或 1 次
+匹配前面的子表达式一次或多次
{n}n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个
{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次最多匹配 m 次
预定义的 POSIX 字符类[:alpha:]任何字母。
[:digit:]任何数字。
[:alnum:]任何字母和数字。
[:space:]任何白字符。
[:upper:]任何大写字母。
[:lower:]任何小写字母。
[:punct:]任何标点符号。
[:xdigit:]任何16进制的数字,相当于[0-9a-fA-F]。

2. 操作符运算优先级

各种操作符的运算优先级
\转义符
(), (??, (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序
|

3. 各类正则表达式函数

3.1 ORACLE中的支持正则表达式的函数主要有下面四个:

  • REGEXP_LIKE(匹配)
  • REGEXP_INSTR (包含)
  • REGEXP_REPLACE(替换)
  • REGEXP_SUBSTR(提取)

例子:

SELECT * from byh_user 
where REGEXP_LIKE(mobile, '^[1]{1}[345]{1}[[:digit:]]{9}$')

3.2 Hive正则匹配函数

  • (1)regexp_extract
    语法: regexp_extract(string subject, string pattern, int index)
    返回值: string
    说明: 将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。
    第一参数: 要处理的字段
    第二参数: 需要匹配的正则表达式
    第三个参数:
    0是显示与之匹配的整个字符串
    1 是显示第一个括号里面的
    2 是显示第二个括号里面的字段…
    例子:
select
regexp_extract('x=a3&x=18abc&x=2&y=3&x=4','x=([0-9]+)([a-z]+)',0),  -- x=18abc
regexp_extract('x=a3&x=18abc&x=2&y=3&x=4','^x=([a-z]+)([0-9]+)',0)  -- x=a3
  • (2)regexp_replace
    例子:
    regexp_replace(mobile,’[^0-9]’,’’)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值