例1:
求字符串’AcBAc’中有几个’A’
则sql:
SELECT LENGTH('AcBAc')-LENGTH(REPLACE('AcBAc','A',''));
例2:
求字符串’AcBAc’中有几个’Ac’
则sql:
SELECT (LENGTH('AcBAc')-LENGTH(REPLACE('AcBAc','Ac','')))/LENGTH('Ac');
例3:
求字符串’Ac,B,Ac,Ac’中有几个’Ac’,逗号分隔,Ac,B,Ac,Ac分别都是一个整体,且可能重复
正确的sql:
1、将’Ac,B,Ac,Ac’改成用两个逗号分隔,前后再加逗号,CONCAT(’,’,REPLACE(‘Ac,B,Ac,Ac’,’,’,’,’),’,’))
2、替换其中的CONCAT(’,’,‘Ac’,’,’)为’,’
3、看前后长度相差多少
4、除以LENGTH(‘Ac’)
SELECT (LENGTH(CONCAT(',,',REPLACE('Ac,B,Ac,Ac',',',',,'),',,'))-LENGTH(REPLACE(CONCAT(',,',REPLACE('Ac,B,Ac,Ac',',',',,'),',,'),CONCAT(',','Ac',','),',,')))/LENGTH('Ac') ;
.
错误的sql:
如果按’,Ac,'替换,那么如果只用一个逗号分隔,当‘,Ac,Ac,’连续时,只会替换掉其中一个
SELECT (LENGTH(',Ac,B,Ac,Ac,')-LENGTH(REPLACE(',Ac,B,Ac,Ac,',',Ac,',',,')))/LENGTH('Ac') ;
适合场景:
string1为某个代码的多选集合,以逗号分隔,求某个代码code1在string1中出现了几次
通用sql:
SELECT (LENGTH(CONCAT(',,',REPLACE(string1,',',',,'),',,'))-LENGTH(REPLACE(CONCAT(',,',REPLACE(string1,',',',,'),',,'),CONCAT(',',code1,','),',,')))/LENGTH(code1) ;