你可以存储此作为一个位域,然后使用布尔逻辑运算符来获取值
例如:
CREATE TABLE [dbo].[testBF](
[field1] [varchar](max) NOT NULL,
[field2] [varchar](max) NOT NULL,
[bitfield] [int] NOT NULL CONSTRAINT [DF_testBF_bitfield] DEFAULT ((0))
) ON [PRIMARY]
然后,对于选择:
SELECT field1, field2,
CASE WHEN (bitfield & 1) = 1 THEN 'monday ' ELSE '' END +
CASE WHEN (bitfield & 2) = 2 THEN 'tuesday ' ELSE '' END +
CASE WHEN (bitfield & 4) = 4 THEN 'wednesday ' ELSE '' END +
CASE WHEN (bitfield & 8) = 8 THEN 'thursday ' ELSE '' END +
CASE WHEN (bitfield & 16) = 16 THEN 'friday' ELSE '' END as [days of week]
FROM testBF
要找到所有包含星期二标志的日子(星期二是第二位或2^1或2)
SELECT *
FROM aTable
WHERE (bitfield & 2) = 2
或
SELECT *
FROM aTable
WHERE (bitfield & 2) != 0
注意,在第二种情况下,模板将任何位工作 - 这是星期五(第5位或2^4或16)。将
SELECT *
FROM aTable
WHERE (bitfield & 16) != 0
最后一般情况下...传递一个数字(1星期一)你
SELECT *
FROM aTable
WHERE (bitfield & POWER(2,@inNumOfWeekday-1)) != 0
对于我来说,这看起来像很多工作,当你可以将它保存为5(或7位字段),但这是你如何做到这一点。
更多的例子,看看我写的另一个问题要点:
https://gist.github.com/1846338
和答案:
https://stackoverflow.com/a/9302106/215752
如何将七位数据分成一列而不是七位?我会认为单独的列会更容易。 – 2012-03-10 05:16:08