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

How to use CASE statement in SQL WHERE clause

框架:ASP.NET 网络表单。

我有两个文本框,一个用于输入开始日期时间,另一个用于输入结束日期时间。我还有一个下拉列表,允许用户在 "Local Time" 和 "UTC" 之间 select。

场景是

  1. 如果用户 selects "Local Time" 在下拉列表中,检索 [LocalTimeColumn]@StartDateTime@EndDateTime 之间的结果 [=18] =]

  2. 如果用户 selects "UTC" 在下拉列表中,检索 [UTCColumn]@StartDateTime@EndDateTime 之间的结果

我写的 SQL 查询不起作用:

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

CASE 表达式(即 THENELSE 之后的谓词)必须是标量值,而不是另一个逻辑表达式。你可以让你的 WHERE 子句做你想做的事,稍微重构一下:

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