あなたはビットフィールドとしてこれを格納し、例えば値
を取得するために、ブール論理演算子を使用することができます。
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番目のビットまたは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
7ビットではなく、1つの列に7ビットをクランチするのは本当に簡単ですか?私は別の列がより簡単になると思います。 –