如何在SQL WHERE子句中使用CASE语句

时间:2018-08-24 09:26:42

标签: sql qsqlquery

框架: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 :(得分:1)

CASE表达式(即THENELSE之后的谓词)必须是标量值,而不是另一个逻辑表达式。您可以通过轻微的重构使WHERE子句执行您想要的操作:

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