前言:之前遇到一个需求,需要在MySql的字段中截取一段字符串中的特定字符,类似于正则表达式的截取,接个百度的方法,和咨询大数据的同事的结果,总结出两个比较好用的方法,比较简单的需要截取的需求,在这里不再赘述,大家可自行百度。只列举相对较难的需求,
需求是这样的:
1.如下图,需要在第一列中,提取出L10,L9这样的等级,但是因为位数不固定,所以处理起来相对困难
2.解决方法一:
百度方法:
2.1.substring_index(input,split,index):input为要截取的字符,split为分隔符,Index为要截取第index个分隔符左(index为正)或右(index为负)的字符串。
拿个人的一个字符串举例:'Provider="RiskManagement" finalScore="65" RGID="100397278"' 我要获取finalScore的值:
1
2
3
4
5
|
-- 1-获取finalScore右边的字符
select substring_index('Provider="RiskManagement" finalScore="65" RGID="100397278"','finalScore="',-1);
-- 2-再获取" RGID="左边的字符
select substring_index(substring_index('Provider="RiskManagement" finalScore="65" RGID="100397278"','finalScore="',-1),'" RGID="',1);
|
结果1:65" RGID="100397278"
结果2:65
2.1.1 应用:
SUBSTRING_INDEX(SUBSTRING_INDEX("字段名","L",-1),"U",1) 得到上图中DD列结果,可以在通过concat 方法进行拼接得到想要的结果
2.2 方法二:
通过regexp_extract 方法得到
2.2.1 应用:
regexp_extract('字段名', 'L\\d+') 得到上图中dd1列结果,直接就是我们想要的结果。