前言:之前遇到一個需求,需要在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列結果,直接就是我們想要的結果。