查询列以查看它是否包含特定数字的最佳方法是什么?该列是 varchar

What's the best way to query a column to see if it contains a particular number? The column is varchar

我有一个 table,有一列包含一些由逗号分隔的数字。我需要 select * 包含特定值的行。我正在使用 SQL 服务器和 C#,因此它可以在 SQL 或 LINQ 中。

我的频道列 (varchar) 中的数据如下所示:1,5,8,22,27,33

我的媒体 table 看起来像这样:

MediaID MediaName MediaDate ChannelIDs
------- --------- --------- ----------
1 | The Cow Jumped Over The Moon | 01/18/2015 | 1,5,8,22,27,33
2 | The Cat In The Hat | 01/18/2015 | 2,4,9,25,28,31
3 | Robin Hood The Thief | 01/18/2015 | 3,5,6,9,22,33
4 | Jingle Bells Batman Smells | 01/18/2015 | 6,7,9,24,25,32
5 | Up The River Down The River | 01/18/2015 | 5,6,10,25,26,33

等...

我的频道 Table 看起来像这样:

ChannelID ChannelName
--------- -----------
1 Animals
2 Television
3 Movies
4 Nursery Rhymes
5 Holidays

等...

每行媒体可以包含多个频道。

我应该像这样使用包含搜索吗?

SELECT * FROM Media WHERE CONTAINS (Channels,'22')

这将需要我对此列进行全文索引,但我真的不想将此列包含在我的全文索引中。

有更好的方法吗?

谢谢

您应该修正您的数据格式,这样您就不会将数字存储为逗号分隔的字符串。 SQL 有一个很好的列表数据结构,它被称为 table 而不是字符串。特别是,您想要一个联结 table 每个 "media" 实体和 id 一行。

也就是说,有时您会受困于特定的数据结构。如果是这样,您可以使用:

where ','+channels+',' like '%,22,%'

注意:这不能利用常规索引,因此性能不会很好。如果你有一个大的 table 并且需要更好的性能,请修复数据结构。