sql判断以逗号分隔的字符串中是否包含某个字符串,不是模糊查询

本文介绍了如何在SQL中使用CHARINDEX或FIND_IN_SET函数检查字符串数组(以逗号分隔)是否包含指定的字符串,包括SQL Server和MySQL的实现方法,并提供了示例和可能的误解纠正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sql语句中,以逗号分隔的字符串中是否包含某个特定字符串,类似于判断一个数组中是否包含某一个元素,例如:判断 ,a,b,c,d,e,f,g中是否包含 a ,sql语句如何实现?

SQL中没有类似VB中的Split的函数。此时,如要匹配 ,6,3,9,22,中的6。可用charindex函数巧妙实现:(注意红色的逗号)

charindex( ',' +cast(6 as varchar)+ ',',‘,6,3,9,22,’)>0

sqlserver:sqlserver中没有封装好的方法可以实现该功能,可以通过 CHARINDEX(','+ ele +','  ,  ','+str+',') 来实现,str是一个以逗号分隔的字符串,ele是一个特定字符串,该方法表示判断str中是否包含ele,若值大于0,则表示包含,否则不包含。这里通常会有一个误区:通过使用%模糊匹配来判断,举个该方法不成立的例子,若使用模糊匹配判断 'b,ab,aba,bc,c' 中是否包含字符串 'a',得到的结果是包含,但实际答案是否定的。

实例:

SELECT * FROM [news] t where charindex( ',' +'a'+',',t.news_tag)>0 

换成 like 相当于 like '%,a,%'

如果写成  SELECT * FROM [news] t where charindex( 'a',t.news_tag)>0   ,换成 like 相当于 like '%a%'  ,字段  a,ab,c,d,e,f,g   则会把 ab也取出来,所以不能这么写,

而是要在字符串前后各家一个逗号  ,a,b,c,d,e,f,g,     并且查询语句写成  SELECT * FROM [news] t where charindex( ',' +'a'+',',t.news_tag)>0    换成 like 相当于 like '%,a,%'      SELECT * FROM [news] t where like '%,a,%'

 

mysql:mysql中有一个方法 FIND_IN_SET(ele, str),str是一个以逗号分隔的字符串,ele是一个特定字符串,该方法表示判断str中是否包含ele。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值