语法 : regexp_extract(string subject, string pattern, int index)

返回值 : string

说明 : 将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。

  • 第一参数string subject: 要处理的字段
  • 第二参数string pattern: 需要匹配的正则表达式
  • 第三个参数int 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

regexp_extract(‘https://detail.tmall.com/item.htm?spm=608.7065813.ne.1.Ni3rsN&id=522228774076&tracelog=fromnonactive’,‘id=([0-9]+)’,0), – id=522228774076

regexp_extract(‘https://detail.tmall.com/item.htm?spm=608.7065813.ne.1.Ni3rsN&id=522228774076&tracelog=fromnonactive’,‘id=([0-9]+)’,1), – 522228774076

regexp_extract(‘http://a.m.taobao.com/i41915173660.htm’,‘i([0-9]+)’,0), – i41915173660

regexp_extract(‘http://a.m.taobao.com/i41915173660.htm’,‘i([0-9]+)’,1) – 41915173660

select regexp_extract(‘hitdecisiondlist’,‘(i)(.*?)(e)’,0) ;

结果:itde

select regexp_extract(‘hitdecisiondlist’,‘(i)(.*?)(e)’,1) ;

select regexp_extract(‘hitdecisiondlist’,‘(i)(.*?)(e)’,2) ;

结果:td

select regexp_extract(‘x=a3&x=18abc&x=2&y=3&x=4’,‘x=([0-9]+)([a-z]+)’,2) from default.dual;

结果:abc

提取固定数字

提取没有清洗数值中的数字部分

存在没有清洗的数值 value
1、示例内容:
‘身份证号 : 0123456789876543210,完毕’
由 汉字+标点+数字+标点+汉字 组成
2、我们只想提取其中部分数字内容

select regexp_extract('身份证号 : 0123456789876543210,完毕','.*([0-9]{19}).*',1)
  • .* :代表任意多次匹配任意值
  • [0-9]:代表从0-9数字中匹配
  • {19}:代表匹配19次
0123456789876543210

提取手机号

select regexp_extract('身份证号 : 0123456789876543210,完毕,手机号:13012341234','.*([1][35678][0-9]{9}).*$',1)
  • 手机号是规则的,11位,并且1开头[35678]是第二位
  • [35678]:代表手机号的第二位,也可自行修改
  • [0-9]:代表匹配0-9数字
  • {9}:代表剩余的9位数字匹配九次
13012341234

split_part

select split_part (‘/abc/required_string/2/’, ‘/’, 3)
返回:required string

SUBSTRING_INDEX

select 
SUBSTRING_INDEX('#住宿和餐饮业#餐饮业#餐饮#河北省#保定市#雄县', '#', 2),
SUBSTRING_INDEX(SUBSTRING_INDEX('#住宿和餐饮业#餐饮业#餐饮#河北省#保定市#雄县', '#', 2), '#', -1) AS result,
SUBSTRING_INDEX('#住宿和餐饮业#餐饮业#餐饮#河北省#保定市#雄县', '#', 3),
SUBSTRING_INDEX(SUBSTRING_INDEX('#住宿和餐饮业#餐饮业#餐饮#河北省#保定市#雄县', '#',3), '#', -1) AS result2
"_c0"	"result"	"_c2"	"result2"
"#住宿和餐饮业"	"住宿和餐饮业"	"#住宿和餐饮业#餐饮业"	"餐饮业"
				
需求:最近boss要求做一个专项数据,提取所有AJ中涉及酒驾/醉驾但没有正常处理的数据,实现的原理是在描述中查找是否有酒精含量,有就提取出来判断是否酒驾/醉驾,这就涉及到需要用到正则表达式提取数字和字符串。特此做个记录方便后续查看。 常见正则表达式运算符
尽管 T-SQL 对多数数据处理而言极其强大,但它对文本分析或操作所提供的支持却很少。尝试使用内置的字符串函数执行任何复杂的文本分析会导致难于调试和维护的庞大的函数和存储过程。有更好的办法吗? 实际上,正则表达式提供了更高效且更佳的解决方案。它在比较文本以便标识记录方面的益处显而易见,但是它的用途并不仅限于此。我们将介绍如何执行各种简单或令人惊异的任务,这些任务在 SQL Server...
    string text = "select * from [admin] where aa=1 and cc='b' order by aa desc ";     Regex reg = null; reg = new Regex(@"\s+from\s+.*?(\s+where\s+|\s+order\s+|\s+group\s+)|...
SQL语言中不直接提供正则表达式提取所有汉字的功能,但可以通过使用内置函数和字符匹配实现这个需求。以下是一个示例: 假设要从一个名为`name`的表中的`field`字段提取所有汉字,可以使用`SUBSTRING`函数结合`LIKE`操作符进行匹配,如下所示: ```sql SELECT SUBSTRING(field, n, 1) AS chinese_character FROM name WHERE field LIKE '%[\u4E00-\u9FFF]%'; - `SUBSTRING(field, n, 1)`:这个函数用于提取字段中的单个字符,其中`n`是字符在字段中的位置。 - `LIKE '%[\u4E00-\u9FFF]%'`:这个条件用于匹配包含汉字的字段。在正则表达式中,`[\u4E00-\u9FFF]`代表所有汉字的Unicode范围,`%`代表任意字符。 这样,就能够得到包含所有汉字的结果集。 请注意,不同的数据库系统可能对正则表达式的支持有所差异,以上示例适用于一些主流的关系型数据库,如MySQLSQL Server。如果使用其他数据库,可能需要根据具体情况做一些调整。