regexp_extract
:字符串正则表达式解析函数,返回值为字符串string类型。
regexp_extract可用于一般截取函数substr无法使用的一些复杂场景。
用法:regexp_extract(str, regexp[, idx])
str:被解析的字符串或字段名
regexp:正则表达式
idx:是返回结果索引,取表达式的哪一()部分<子表达式>,默认值为1
0表示把整个正则表达式对应的结果全部返回;
1表示返回正则表达式中第一个() 对应的结果, 以此类推
注意:idx的数字不能大于表达式中()的个数,否则报错
应用场景:
解析单个字符串;
字段值粒度太细,需要粗粒度分组聚合/比较时;
示例5:version版本字段值:[1级].[2级].[3级](1,2,3级取值范围:0~99)
示例6:字段值不规范,提取有效部分
code 结果
1.select regexp_extract(‘hitdecisiondlist’,‘(i)(.?)(e)‘,0) itde
2.select regexp_extract(‘hitdecisiondlist’,’(i)(.?)(e)’,1) i
3.select regexp_extract(‘hitdecisiondlist’,’(i)(.*?)(e)’,2) td
4.select regexp_extract(‘x=a3&x=18abc&x=2&y=3&x=4’,‘x=([0-9]+)([a-z]+)’,0) x=18abc
5.select cast(regexp_extract(version,‘^([0-9]+)’,0) as BIGINT) <6 取1级版本小于6的
6.select regexp_extract(app_version,‘^([0-9]+).([0-9]+).([0-9]+)’,0) 清洗数据
–去除小数点后面的0
select regexp_replace(regexp_replace(cast(106.0000 as string),“0*
"
,
′
′
)
,
"
.
",''),"\\.
",′′),".”,‘’)
,regexp_replace(regexp_replace(cast(100.31000 as string),“0*
"
,
′
′
)
,
"
.
",''),"\\.
",′′),".”,‘’) --106 100.31
将xxxx年xx月xx日转为 xxxxxxxx
select ‘2024年5月6日公告: 根据公司《可转债募集说明书》的规定:在本次发行的可转换公司债券期满后5个交易日内,公司将以本次可转债票面面值上浮6%(含最后一期利息)的价格向投资者赎回全部未转股的可转债。即“三力转债”到期合计兑付价格为106元/张(含最后一期利息,含税)。 2024年6月1日公告: 1、“三力转债”到期日和兑付登记日:2024年6月7日(星期五) 2、“三力转债”到期兑付价格:106元/张(含最后一期利息,含税) 3、“三力转债”到期兑付资金发放日:2024年6月11日(星期二) 4、“三力转债”摘牌日:2024年6月11日(星期二) 5、“三力转债”最后交易日:2024年6月4日(星期二) 6、“三力转债”最后转股日:2024年6月7日(星期五)
’
,regexp_extract(‘2024年5月6日公告: 根据公司《可转债募集说明书》的规定:在本次发行的可转换公司债券期满后5个交易日内,公司将以本次可转债票面面值上浮6%(含最后一期利息)的价格向投资者赎回全部未转股的可转债。即“三力转债”到期合计兑付价格为106元/张(含最后一期利息,含税)。 2024年6月1日公告: 1、“三力转债”到期日和兑付登记日:2024年6月7日(星期五) 2、“三力转债”到期兑付价格:106元/张(含最后一期利息,含税) 3、“三力转债”到期兑付资金发放日:2024年6月11日(星期二) 4、“三力转债”摘牌日:2024年6月11日(星期二) 5、“三力转债”最后交易日:2024年6月4日(星期二) 6、“三力转债”最后转股日:2024年6月7日(星期五)
‘, ‘交易日:+(\d+年\d+月\d+日)’)
,unix_timestamp(regexp_extract(‘2024年5月6日公告: 根据公司《可转债募集说明书》的规定:在本次发行的可转换公司债券期满后5个交易日内,公司将以本次可转债票面面值上浮6%(含最后一期利息)的价格向投资者赎回全部未转股的可转债。即“三力转债”到期合计兑付价格为106元/张(含最后一期利息,含税)。 2024年6月1日公告: 1、“三力转债”到期日和兑付登记日:2024年6月7日(星期五) 2、“三力转债”到期兑付价格:106元/张(含最后一期利息,含税) 3、“三力转债”到期兑付资金发放日:2024年6月11日(星期二) 4、“三力转债”摘牌日:2024年6月11日(星期二) 5、“三力转债”最后交易日:2024年6月4日(星期二) 6、“三力转债”最后转股日:2024年6月7日(星期五)
‘, ‘交易日:+(\d+年\d+月\d+日)’), ‘yyyy年MM月dd日’)
,from_unixtime(unix_timestamp(regexp_extract(‘2024年5月6日公告: 根据公司《可转债募集说明书》的规定:在本次发行的可转换公司债券期满后5个交易日内,公司将以本次可转债票面面值上浮6%(含最后一期利息)的价格向投资者赎回全部未转股的可转债。即“三力转债”到期合计兑付价格为106元/张(含最后一期利息,含税)。 2024年6月1日公告: 1、“三力转债”到期日和兑付登记日:2024年6月7日(星期五) 2、“三力转债”到期兑付价格:106元/张(含最后一期利息,含税) 3、“三力转债”到期兑付资金发放日:2024年6月11日(星期二) 4、“三力转债”摘牌日:2024年6月11日(星期二) 5、“三力转债”最后交易日:2024年6月4日(星期二) 6、“三力转债”最后转股日:2024年6月7日(星期五)
‘, ‘交易日:+(\d+年\d+月\d+日)’), ‘yyyy年MM月dd日’), ‘yyyy年MM月dd日’)
,from_unixtime(unix_timestamp(regexp_extract(‘2024年5月6日公告: 根据公司《可转债募集说明书》的规定:在本次发行的可转换公司债券期满后5个交易日内,公司将以本次可转债票面面值上浮6%(含最后一期利息)的价格向投资者赎回全部未转股的可转债。即“三力转债”到期合计兑付价格为106元/张(含最后一期利息,含税)。 2024年6月1日公告: 1、“三力转债”到期日和兑付登记日:2024年6月7日(星期五) 2、“三力转债”到期兑付价格:106元/张(含最后一期利息,含税) 3、“三力转债”到期兑付资金发放日:2024年6月11日(星期二) 4、“三力转债”摘牌日:2024年6月11日(星期二) 5、“三力转债”最后交易日:2024年6月4日(星期二) 6、“三力转债”最后转股日:2024年6月7日(星期五)
‘, ‘交易日:+(\d+年\d+月\d+日)’), ‘yyyy年MM月dd日’), ‘yyyyMMdd’)
,regexp_extract(regexp_extract(enforcereason, ‘交易日:+(\d+年\d+月\d+日)’),’(\d+)(年)’,1)
,regexp_extract(regexp_extract(enforcereason, ‘交易日:+(\d+年\d+月\d+日)’),’(年)(\d+)(月)’,2)
,lpad(regexp_extract(regexp_extract(enforcereason, ‘交易日:+(\d+年\d+月\d+日)’),’(年)(\d+)(月)’,2),2,‘0’)
,lpad(regexp_extract(regexp_extract(enforcereason, ‘交易日:+(\d+年\d+月\d+日)’),’(月)(\d+)(日)’,2),2,‘0’)
,from_unixtime(unix_timestamp(regexp_extract(enforcereason, ‘交易日:+(\d+年\d+月\d+日)’), ‘yyyy年MM月dd日’), ‘yyyyMMdd’) as enforcereason1 --最后交易日
,concat(regexp_extract(regexp_extract(enforcereason, ‘交易日:+(\d+年\d+月\d+日)’),’(\d+)(年)‘,1),lpad(regexp_extract(regexp_extract(enforcereason, ‘交易日:+(\d+年\d+月\d+日)’),’(年)(\d+)(月)‘,2),2,‘0’),lpad(regexp_extract(regexp_extract(enforcereason, ‘交易日:+(\d+年\d+月\d+日)’),’(月)(\d+)(日)',2),2,‘0’))