Как использовать оператор CASE в предложении SQL WHERE - PullRequest
0 голосов
/ 24 августа 2018

Framework: веб-формы ASP.NET.

У меня есть два текстовых поля, одно для ввода начального времени и времени для другого конечного времени. У меня также есть раскрывающийся список, позволяющий пользователям выбирать между «Местным временем» и «UTC».

Сценарии:

  1. Если пользователь выбирает «Местное время» в раскрывающемся списке, получить результат от @StartDateTime до @EndDateTime в [LocalTimeColumn] столбце

  2. Если пользователь выбирает «UTC» в раскрывающемся списке, получить результат в диапазоне от @StartDateTime до @EndDateTime в столбце [UTCColumn]

SQL-запрос, который я написал, не работает:

SELECT *
FROM [vmc]
WHERE 
    @DropDownList = CASE
                       WHEN @DropDownList = "Local Time"
                          THEN ([LocalTimeColumn] BETWEEN @StartDateTime AND @EndDateTime)
                          ELSE ([UTCColumn] BETWEEN @StartDateTime AND @EndDateTime)
                    END

1 Ответ

0 голосов
/ 24 августа 2018

Предикат выражения CASE (т. Е. Того, что следует за THEN и ELSE) должен быть скалярным значением, а не другим логическим выражением.Вы можете заставить ваше предложение WHERE делать то, что вы хотите, с небольшим рефакторингом:

SELECT *
FROM [vmc]
WHERE
    (@DropDownList = "Local Time" AND
     [LocalTimeColumn] BETWEEN @StartDateTime AND @EndDateTime) OR
    [UTCColumn] BETWEEN @StartDate AND @EndDate;
...