今天中午做需求的时候,有类似于根据银行卡卡号的前几位判断出是哪个银行的情况,每个银行需要截取的位数都不一样,这时我就想到了SUBSTR
假设有一个表的结构如下(表名tlk_bnkld_card)
写sql语句的时候就能看到有很多的substr函数的提示,各人根据需求选用。
其中的 str表示被截取的字段
pos表示开始的下标
len表示截取的长度
1 SELECT SUBSTR(idtf_value FROM 1 FOR 2) idtfValue
2 FROM tlk_bnkld_card
3 WHERE 1=1
截取字段idtf_value ,从第一位开始截取,截取两位
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(“待截取有用部分的字符串”,“截取数据依据的字符”,截取字符的位置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'
截取时就说从后往前截取,截取到从后面数的第二个之前