如何在 SQL WHERE 子句中使用 CASE 语句
How to use CASE statement in SQL WHERE clause
框架:ASP.NET 网络表单。
我有两个文本框,一个用于输入开始日期时间,另一个用于输入结束日期时间。我还有一个下拉列表,允许用户在 "Local Time" 和 "UTC" 之间 select。
场景是
如果用户 selects "Local Time" 在下拉列表中,检索 [LocalTimeColumn]
列 @StartDateTime
和 @EndDateTime
之间的结果 [=18] =]
如果用户 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
表达式(即 THEN
和 ELSE
之后的谓词)必须是标量值,而不是另一个逻辑表达式。你可以让你的 WHERE
子句做你想做的事,稍微重构一下:
SELECT *
FROM [vmc]
WHERE
(@DropDownList = "Local Time" AND
[LocalTimeColumn] BETWEEN @StartDateTime AND @EndDateTime) OR
[UTCColumn] BETWEEN @StartDate AND @EndDate;
框架:ASP.NET 网络表单。
我有两个文本框,一个用于输入开始日期时间,另一个用于输入结束日期时间。我还有一个下拉列表,允许用户在 "Local Time" 和 "UTC" 之间 select。
场景是
如果用户 selects "Local Time" 在下拉列表中,检索
[LocalTimeColumn]
列@StartDateTime
和@EndDateTime
之间的结果 [=18] =]如果用户 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
表达式(即 THEN
和 ELSE
之后的谓词)必须是标量值,而不是另一个逻辑表达式。你可以让你的 WHERE
子句做你想做的事,稍微重构一下:
SELECT *
FROM [vmc]
WHERE
(@DropDownList = "Local Time" AND
[LocalTimeColumn] BETWEEN @StartDateTime AND @EndDateTime) OR
[UTCColumn] BETWEEN @StartDate AND @EndDate;