首页 > 解决方案 > 如果 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 为空,则将其设置为今天的日期并与“结束”进行比较。但是,这不会返回任何数据。这显然是错误的,那么正确的方法是什么?

标签: sql-servertsqlreporting-servicesssms

解决方案


这里不需要使用 CASE 语句,因为我们可以使用 ISNULL 或 COALESCE。

SELECT * 
FROM mytab 
WHERE Start >= ISNULL( @From , DATEADD(year, -100, GETDATE()) ) 
  AND End   <= ISNULL( @To   , GETDATE() )

推荐阅读