2011-06-21 14 views
2

私は、idフィールドと、5つのフィールド(月曜日から金曜日までの各週の1つで、データ型がビット)を含むテーブルを持っています。私はその日のためにtrueにビットを設定している行を返すようにしようとしている日によってSQL where句論理

+---+--------+---------+-----------+----------+--------+ 
|id | Monday | Tuesday | Wednesday | Thursday | Friday | 
+---+--------+---------+-----------+----------+--------+ 
| 1 |  1 |  0 |   0 |  0 |  0 | 
+---+--------+---------+-----------+----------+--------+ 
| 2 |  1 |  0 |   0 |  0 |  0 | 
+---+--------+---------+-----------+----------+--------+ 
| 3 |  0 |  0 |   0 |  1 |  0 | 
+---+--------+---------+-----------+----------+--------+ 
| 4 |  1 |  0 |   0 |  0 |  1 | 
+---+--------+---------+-----------+----------+--------+ 

テーブルは次のように見えます。私はwhere節でこれを行うことを考えていましたが、動作させることはできません。

私の論理に何か間違っていると思いますが、どんな助けでも大歓迎です!

DECLARE @tDay as INTEGER 
SET @tDay = datepart(weekday, getdate()) 

SELECT  id, monday, tuesday, wednesday, thursday, friday 
FROM   Days 
WHERE CASE WHEN @tDay = 2 then @tDay 
     Else Days.monday 
     End = 1 
     AND 
     CASE WHEN @tDay = 3 then @tDay 
     Else Days.tuesday 
     End = 1 
+0

希望するサンプルデータとサンプル出力を表示できますか? – Kangkan

+0

1 True False True False True 2 True True True False月が本当ならTrueです。最初の列がTrueの行が返されました。ありがとう! – sooty

+1

投稿を直接編集することができます。 – Kangkan

答えて

3

SET DATEFIRSTはあなたが週の最初の日として、いくつかの他の日があれば調整する必要が7である場合、これは動作します。

DECLARE @tDay as INTEGER 
SET @tDay = datepart(weekday, getdate()) 

select id, monday, tuesday, wednesday, thursday, friday 
from Days 
where case @tDay 
     when 2 then monday 
     when 3 then tuesday 
     when 4 then wednesday 
     when 5 then thursday 
     when 6 then friday 
     end = 1 
2
SELECT  id, monday, tuesday, wednesday, thursday, friday 
FROM   Days 
WHERE 
     CASE @tDay 
      WHEN 2 THEN monday 
      WHEN 3 THEN tuesday 
      WHEN 4 THEN wednesday 
      WHEN 5 THEN thursday 
      WHEN 6 THEN friday 
      ELSE NULL 
     END = 1