你可以存儲此作爲一個位域,然後使用布爾邏輯運算符來獲取值
例如:
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