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

时间:2015-01-18 16:58:33

标签: sql sql-server linq linq-to-sql

我有一个表格,其中包含一些用逗号分隔的数字。我需要选择包含特定值的*行。我使用的是SQL Server和C#,因此可以使用SQL或LINQ。

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

我的媒体表如下所示:

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

等...

我的频道表如下所示:

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

等...

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

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

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

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

有更好的方法吗?

由于

1 个答案:

答案 0 :(得分:6)

您应该修复数据格式,这样就不会将数字存储为逗号分隔的字符串。 SQL为列表提供了很好的数据结构,它被称为表而不是字符串。特别是,您需要一个联结表,每个“媒体”实体和id。

一行

尽管如此,有时您会遇到特定的数据结构。如果是这样,您可以使用:

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

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