2

这是我的数据:

Column:
8
7,8
8,9,18
6,8,9
10,18
27,28

我只想要其中包含和8的行。当我做:

Select * 
from table 
where column like '%8%'

我得到了上述所有内容,因为它们包含一个8. 当我做:

Select * 
from table 
where column like '%8%' 
   and column not like '%_8%'

我得到:

8
8,9,18

我不明白6,8,9,但我需要,因为它8在里面。

任何人都可以帮助获得正确的结果吗?

4

3 回答 3

10

我建议如下:

SELECT *
FROM TABLE
WHERE column LIKE '%,8,%' OR column LIKE '%,8' OR column LIKE '8,%' OR Column='8';

但我必须说,这样存储数据效率非常低,例如,索引在这里无济于事,并且您应该考虑改变存储数据的方式,除非您有充分的理由保持这种方式。

编辑:

我强烈建议在问题的评论中查看@Bill Karwin 的链接:

在数据库列中存储分隔列表真的那么糟糕吗?

于 2013-07-09T22:08:14.420 回答
8

你可以使用:

WHERE ','+col+',' LIKE '%,8,%'

以及强制性的警告:避免存储列表,坏坏等。

于 2013-07-09T22:08:57.330 回答
3

怎么样:

where
    col like '8,%'
    or col like '%,8,%'
    or col like '%,8'
    or col = '8'

但理想情况下,正如 bluefeet 所建议的那样,规范化这些数据而不是存储为分隔文本将为您省去各种麻烦。

于 2013-07-09T22:07:47.763 回答