注册 登录
编程论坛 SQL Server论坛

请问,如何查询ID集合的字段?谢谢

mansohu 发布于 2014-04-01 16:26, 594 次点击
请问,有这样一个字段:
……                商品ID              ……
        2,5,23,66,777,34,9,87
        55,66,104,4,223
                  2
              ……

也就是该字段里都是商品ID集合(ID号为自然数,无位数限制),没有规律,也没有ID数量限制,可能重复,也可能部分重复,也可能无重复
请问:如果我想查询这个字段里含有某个商品ID或某几个商品ID的记录,SQL应该如何写?谢谢!
2 回复
#2
owenlu19812014-04-01 22:43
这个比较繁琐
1个商品 "1001" => "where [ID] = '1001' or [ID] like '1001'+',%' or [ID] or [ID] like '%,'+ '1001' + ',%' or [ID] like '%,'+ '1001'"
2个商品 "1001","1002" => "where ([ID] = '1001' or [ID] like '1001'+',%' or [ID] or [ID] like '%,'+ '1001' + ',%' or [ID] like '%,'+ '1001') "
                         "and ([ID] = '1002' or [ID] like '1002'+',%' or [ID] or [ID] like '%,'+ '1002' + ',%' or [ID] like '%,'+ '1002')"
......
#3
mxbing19842014-08-08 18:00
--先建一个字符串拆分的函数
Create Function f_split(@SourceSql varchar(8000),@StrSeprate varchar(100))   
Returns @temp table(col   varchar(100))   
As     
Begin   
  Declare   @ch   as   varchar(100)   
  Set   @SourceSql=@SourceSql+@StrSeprate     
  While(@SourceSql<>'')   
     Begin   
        set   @ch=left(@SourceSql,charindex(',',@SourceSql,1)-1)   
        insert   @temp   values(@ch)   
        set   @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'')   
     End   
  return   
End   



--查询包含66,223,4的商品ID集合,你可以改成存储过程或函数,然后你就只需要传入参数就可以了
Declare @A varchar(1000)
Set @A='66,223,4'

Select id集合 From
(
    Select id集合,Count(*) As cnt From tab
    Cross Apply dbo.f_split(ID集合,',')
        Where COL in
        (
            Select * From dbo.f_split(@A,',')
        )
        Group By id集合
) S
Where cnt=Len(@A)-Len(Replace(@A,',',''))+1
1