学习更多,欢迎关注微信公众号:Excel办公小技巧
SQL作为一种结构化查询语言,方便我们快速拿到大量存储规范的数据。不过我们也会遇到不能直接拿到我们想要的数据格式,比如我们要从URL中拿到某个参数值或是拿到某一字符串中的指定长度,今天我们介绍两个功能来帮助我们:parse_url函数以及正则表达式功能。
1. parse_url函数提取URL需求信息
1.1 主机HOST
select parse_url('https://mp.weixin.qq.com/s/bblf5-0Ur8MUgG02kpOc5Q?case=111','HOST')
结果:mp.weixin.qq.com
1.2 获取URL路径PATH
select parse_url('https://mp.weixin.qq.com/s/bblf5-0Ur8MUgG02kpOc5Q?case=111','PATH')
结果:/s/bblf5-0Ur8MUgG02kpOc5Q
1.3 获取协议PROTOCOL
select parse_url('https://mp.weixin.qq.com/s/bblf5-0Ur8MUgG02kpOc5Q?case=111','PROTOCOL')
结果:https
1.4 获取?后面的内容QUERY
select parse_url('https://mp.weixin.qq.com/s/bblf5-0Ur8MUgG02kpOc5Q?case=111','QUERY')
结果:case=111
1.5 获取?后面参数对应的值
select parse_url('https://mp.weixin.qq.com/s/bblf5-0Ur8MUgG02kpOc5Q?case=111','QUERY','case')
结果:111
1.6 获取#后的内容:
select parse_url('https://mp.weixin.qq.com/s/bblf5-0Ur8MUgG02kpOc5Q?case=#abc','REF');
结果:abc
2. 正则表达式提取需求信息
正则表达式是一种字符的匹配模型,在很多语言中都会用到。本篇文章通过SQL里的regexp_extract函数实现的几个小案例带大家了解下,详细语法后续单独作为一篇文章介绍。
语法:regexp_extract(要提取的字符串,正则表达式,0(全部返回)或者1(返回第一部分),2,3...)
2.1 提取数字部分
[0-9]表示数字,{1,100}表示数字个数在1-100之间,0表示全部返回
select regexp_extract('acbd 1324','[0-9]{1,100}',0)
或者使用+返回一个或多个或者{1,}不写最大值约束
select regexp_extract('acbd 1324','[0-9]+',0)
结果:1324
2.2 提取英文部分
select regexp_extract('acbd 1324','[a-zA-Z]+',0)
结果:acbd
2.3 提取中文部分
select regexp_extract('acbd 1324中文部分','[\\u4e00-\\u9fa5]+',0)
结果:中文部分
2.4 提取数字和英文部分
2.4.1 中间包含其他字符,如空格
select regexp_extract('acbd 1324中文部分','[\\u4e00-\\u9fa5]+',0)
结果:acbd 1324
2.4.2 中间包含其他字符,如下划线
select regexp_extract('acbd_1324中文部分','\\w+',0)
结果:acbd_1324
2.4.3 若数字字母相连
select regexp_extract('acbd1324中文部分','[A-Za-z0-9]+',0)
结果:acbd1324
2.5 提取浮点类型数值
select regexp_extract('acbd1324.33中文部分','(\\d+)(\\.\\d+)',0)
结果:1324.33
2.6 有负数怎么办
select regexp_extract('acbd:-1324.33','(-*\\d+)(\\.\\d+)',0)
结果:-1324.33