Логика SQL Where Clause - PullRequest
       1

Логика SQL Where Clause

2 голосов
/ 21 июня 2011

У меня есть таблица, которая содержит поле id вместе с 5 полями, по одному для каждого дня недели с понедельника по пятницу, где тип данных является битовым.

Таблица выглядит примерно так:

+---+--------+---------+-----------+----------+--------+
|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 

Ответы [ 2 ]

3 голосов
/ 21 июня 2011

Это будет работать, если 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 голосов
/ 21 июня 2011
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...