提问人:Elizabeth 提问时间:7/6/2023 更新时间:7/6/2023 访问量:32
WHERE 子句中的 SQL CASE 语句
SQL CASE statement in the WHERE clause
问:
我有一个用户的报告,数据集有 3 个可以评估的可能日期。(尽管这可以增长到我们系统中的 5 个)。
对于这三个日期中的每一个,他们都可以选择范围的开始日期和结束日期。
我想做的是说,如果用户选择 date1,则在开始日期和结束日期之间将查询评估为 date1。如果用户选择 date2,则在开始日期和结束日期之间计算 date2
@review_dt = value they pick - start_dt, expiration_dt, etc.
select * from <TABLE>
where fyear = @fyear
and CASE WHEN @review_dt = 'start_dt' THEN start_dt between @date_start and @date_end
WHEN @review_dt = 'expiration_dt' THEN expiration_dt between @date_start and @date_end
WHEN @review_dt = 'perf_dt' THEN perf_dt between @date_start and @date_end
如果这不是我可以像这样做的事情 - 什么是一个好的、干净的简单方法可以做到这一点,而不需要一系列嵌套的 if 语句。
答:
0赞
GMB
7/6/2023
#1
表达式生成标量值,而您要计算条件。您可以改用布尔逻辑:case
select *
from mytable
where
fyear = @fyear
and (
(@review_dt = 'start_dt' and start_dt between @date_start and @date_end)
or (@review_dt = 'expiration_dt' and expiration_dt between @date_start and @date_end)
or (@review_dt = 'perf_dt' and perf_dt between @date_start and @date_end)
)
option (recompile)
评论
sp_executesql