sql 使用in ('1,2,3')时显示 在将 varchar 值 '1,2,3' 转换成数据类型 int 时失败

现在有这样一个表
select * from Student
在这里插入图片描述
我想查询出
所有id=1的ids里包含的id的列表集合
一般我们会这么写
select * from Student where Id in (select Ids from Student where Id=1)
但是实际的情况是会报错
在这里插入图片描述
那么这么写错误的原因是什么呢?
我们想要的查询语句是
select * from Student where Id in (1,2,3)
实际的情况却是
select * from Student where Id in (‘1,2,3’)
in () 只能查询 int
那么我们应该怎么办?
正确的写法
select * from Student where charindex(’,’+ltrim(Id)+’,’,’,’+(select Ids from Student where Id=1) +’,’)>0
在这里插入图片描述
简单的说一下 CHARINDEX函数
CHARINDEX和PATINDEX函数常常用来在一段字符中搜索字符或者字符串。如果被搜索的字符中包含有要搜索的字符,那么这两个函数返回一个非零的整数,这个整数是要搜索的字符在被搜索的字符中的开始位数。

那么在下面这句话的大概的意思就是
select * from Student where charindex(’,’+ltrim(Id)+’,’,’,’+(select Ids from Student where Id=1) +’,’)>0
查询出所有 ‘,’+(select Ids from Student where Id=1) +’,’ 包含 ‘,’+ltrim(Id)+’,’ 的集合
也就是字符串,1,2,3, 含有 ,1, ,2, ,3, 这三个值
select * from Student where charindex(’,’+ltrim(Id)+’,’,’,’+(select Ids from Student where Id=1) +’,’)>0
返回的就是id为这三个值的集合

上述如若有不妥之处,还望指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值