MySQL查某个字符串中包含指定字符/字符串/代码的个数

例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) ;
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 MySQL 内置的函数 `SUBSTRING_INDEX` 和 `REPLACE` 来实现将一个包含逗号分割的字符串转换为多行的 SQL 语句。 假设需要将字符串 `'a,b,c,d,e'` 转换为多行,可以使用以下 SQL 语句: ``` SELECT REPLACE(SUBSTRING_INDEX('a,b,c,d,e', ',', n), ',', '') AS value FROM ( SELECT 1 + units.i + tens.i * 10 AS n FROM ( SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ) units JOIN ( SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ) tens ON 1 WHERE n <= 1 + (LENGTH('a,b,c,d,e') - LENGTH(REPLACE('a,b,c,d,e', ',', ''))) ) AS numbers; ``` 执行以上 SQL 语句,可以得到如下结果: ``` value ----- a b c d e ``` 解释一下上述 SQL 语句: 1. `LENGTH('a,b,c,d,e') - LENGTH(REPLACE('a,b,c,d,e', ',', ''))` 可以得到字符串逗号的个数,加 1 即为需要生成的多行数目。 2. `SELECT 1 + units.i + tens.i * 10 AS n` 生成一个包含数字序列的临时表。 3. `SUBSTRING_INDEX('a,b,c,d,e', ',', n)` 取出以逗号为分隔符的前 n 段字符串。 4. `REPLACE(SUBSTRING_INDEX('a,b,c,d,e', ',', n), ',', '')` 去掉字符串的逗号。 通过将上述 SQL 语句字符串 `'a,b,c,d,e'` 替换为你要处理的字符串即可实现将其通过逗号分割并变成多行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值