读书人

in 的有关问题

发布时间: 2012-01-07 21:41:55 作者: rapoo

in 的问题
写了个自定义函数,把一个表的主键 连接成一个字符串!

然后利用 select * from songs where cast(s_id as varchar) in (dbo.GetSongsIDS(56))

dbo.GetSongsIDS(56) 得到了一个串,比如:156,165,145,158

但是上面的 select 语句却查不到数据~~

为什么呢?


而 select * from songs where cast(s_id as varchar) in (156,165,145,158)

有数据!什么原因呢?




[解决办法]
select * from songs where cast(s_id as varchar) in (156,165,145,158)

不等于

select * from songs where cast(s_id as varchar) in ( '156,165,145,158 ')


你可以这样写:
select * from songs where charindex( ', '+cast(s_id as varchar)+ ', ' , ', ' + dbo.GetSongsIDS(56) + ', ')
[解决办法]
LS解释正确,你的函数得到的是一个字符串,in这个字符串相当于就是和这个字符串的整体比较,不会再按照你理解的分隔匹配了。

可以采用LS的方式在SQL里拆分这个字符串比较
[解决办法]
呵呵,不能算拆分。说是构造比较吧

select * from songs where charindex( ', '+cast(s_id as varchar)+ ', ' , ', ' + dbo.GetSongsIDS(56) + ', ')> 0
[解决办法]
因为你得到的是一个字符串,而不是一组
[解决办法]
用charindex()

select * from songs where charindex( ', '+cast(s_id as varchar)+ ', ' , ', ' + dbo.GetSongsIDS(56) + ', ')> 0

读书人网 >SQL Server

热点推荐