查询列以查看它是否包含特定数字的最佳方法是什么?该列是 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 并且需要更好的性能,请修复数据结构。
我有一个 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 并且需要更好的性能,请修复数据结构。