sql-server - 如果 datetime 参数为 null,则分配 datetime 值
问题描述
我有一个 SSRS 报告,其中包含开始和结束日期参数等。对于开始日期和结束日期,可以设置选项 NULL。规则是,如果开始日期为空,则检索的数据从时间的开始开始。如果结束日期为空,则将其设置为今天的日期。这就是我在这里尝试做的事情:
SELECT *
FROM mytab
WHERE (Start >= CASE @From
WHEN NULL
THEN DATEADD(year, -100, @From)
END)
AND (End <= CASE @To
WHEN NULL THEN GETDATE()
END)
作为测试,我在查询中声明变量 @From 和 @To,将它们设置为 NULL 并在 SSMS 上运行它。
我想要实现的是,如果 @From 为空,则将值设置为 100 年前并将其与 mytab 字段 'Start' 进行比较。同样,如果@To 为空,则将其设置为今天的日期并与“结束”进行比较。但是,这不会返回任何数据。这显然是错误的,那么正确的方法是什么?
解决方案
这里不需要使用 CASE 语句,因为我们可以使用 ISNULL 或 COALESCE。
SELECT *
FROM mytab
WHERE Start >= ISNULL( @From , DATEADD(year, -100, GETDATE()) )
AND End <= ISNULL( @To , GETDATE() )