背景
今天中午做需求的時候,有類似於根據銀行卡卡號的前幾位判斷出是哪個銀行的情況,每個銀行需要截取的位數都不一樣,這時我就想到了SUBSTR
數據庫截取字符串SUBSTR函數的使用
假設有一個表的結構如下(表名tlk_bnkld_card)

寫sql語句的時候就能看到有很多的substr函數的提示,各人根據需求選用。

其中的 str表示被截取的字段
pos表示開始的下標
len表示截取的長度
SUBSTR(str FROM pos FOR len)的使用:
1 SELECT SUBSTR(idtf_value FROM 1 FOR 2) idtfValue 2 FROM tlk_bnkld_card 3 WHERE 1=1
截取字段idtf_value ,從第一位開始截取,截取兩位
執行結果

SUBSTR(str FROM pos) 的使用
1 SELECT SUBSTR(idtf_value FROM 2) idtfValue 2 FROM tlk_bnkld_card 3 WHERE 1=1
截取字段idtf_value ,從第二位截取到結束
執行結果:

SUBSTRING與SUBSTR區別不大,輸出結果一致;
1 SUBSTR(str,pos) 2 SUBSTR(str,pos,len) 3 SUBSTRING(str FROM pos FOR len) 4 SUBSTRING(str FROM pos) 5 SUBSTRING(str,pos) 6 SUBSTRING(str,pos,len)
這幾個函數的用法和上面的兩種類似,參見上述;
SUBSTRING_INDEX(str,delim,count)函數的用法
用法規則:
SUBSTRING_INDEX(“待截取有用部分的字符串”,“截取數據依據的字符”,截取字符的位置N)
例如:
1 SELECT SUBSTRING_INDEX(idtf_value,'4',2) idtfValue 2 FROM tlk_bnkld_card 3 WHERE idtf_value='392454'
將字符串用"4"分割開,截取從開始到第二個“4”之前的字符串輸出
執行結果

注意:
假如有負號像這樣
1 SELECT SUBSTRING_INDEX(idtf_value,'4',-2) idtfValue 2 FROM tlk_bnkld_card 3 WHERE idtf_value='392454'
截取時就說從后往前截取,截取到從后面數的第二個之前
執行結果

歡迎大家關注公眾號,不定時干貨,只做有價值的輸出
作者:Dawnzhang
出處:https://www.cnblogs.com/clwydjgs/p/9324255.html
版權:本文版權歸作者
轉載:歡迎轉載,但未經作者同意,必須保留此段聲明;必須在文章中給出原文連接;否則必究法律責任

