SQL WHERE子句中的CHARINDEX

时间:2012-07-27 19:02:22

标签: sql

我在表格中有一个列,其中的示例数据如下:

ServiceTypeIDs
1,9
4

在我的Where子句中,我使用以下内容进行搜索:

   WHERE
( @ServiceTypes is null or       
   charindex(','+cast(SEP.ServiceTypeIDs as varchar(255))+',',      
   ','+@ServiceTypes+',') > 0)))

如果我的参数@ServieTypes等于'1,9',那么我会得到结果,但当它是@ServiceTypes = '1'或只是'9'时,我就不会收到任何回复。我被卡住并尝试了上述内容。

exact column looks like below

7
8
2
5
4
7
7
7
7
7
7
1
7
null
6,7
7
6
1
7
null
7
7
7
7
7
8
7
6
1
1
1
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
7
1
7
7
1
7
8
7
1
1
2
1
null
7
7
7
7
7
7
7
7
7
7
7
7
7
8
6
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
1
7
7
1
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
1
1
1
1
1,2
1
1
1,2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1,2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
6
7
7
1
8
7
7
7
7
7
7
7
7
7
7
7
2
7
null
null
1
1
1
1
1
7
7
7
1,2
6
7
1
2
1
1
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
5
5
1
1
1
7
7
7
1
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
3
1
9
9
9
9
null
9
1,2
9
9
9
8,9
1,9
1,9
1,9
2,9
1,9
1,9
1,9
1,8
1,9
1,9
9
9
9
9
5
4
3
1
null
1,2,3
6
9
9
9
8,9
9
9
9
1,9

1 个答案:

答案 0 :(得分:1)

你对CHARINDEX的论点是相反的。请改用:

CHARINDEX(','+@ServiceTypes+',', ','+CAST(SEP.ServiceTypeIDs AS VARCHAR(255))+',') > 0

应该注意的是,您的实际问题是数据库设计不佳。您永远不应该将列表存储为类似的字符串,而是使用单独的表,每个关联一行。