首页 > 解决方案 > 如果计算值在某个范围内,则返回 NULL

问题描述

我正在对日期字段执行相当简单的计算,并且我想在日期早于预定义日期的情况下返回 NULL 值。从本质上讲,我正在寻找NULLIF使用除相等以外的运算符执行的最有效方法。

下面是我想做的一个例子(显然语法失败):

SELECT
    Id,
    NULLIF(DATEADD(DAY, -180, SurveyDate),  
        {LESS THAN} '20190101')
FROM dbo.Vendor

我使用以下查询获得了所需的结果,但它似乎有点笨拙和冗长:

SELECT
    Id,
    CASE WHEN DATEADD(DAY, -180, SurveyDate) < '20190101'
        THEN NULL
    ELSE
        DATEADD(DAY, -180, SurveyDate)
    END
FROM dbo.Vendor

标签: sql-serversql-server-2008-r2

解决方案


您可以做的简化是删除语句的ELSE一部分:CASE

CASE WHEN DATEADD(DAY, -180, SurveyDate) >= '20190101' THEN DATEADD(DAY, -180, SurveyDate) END

我看不出如何在DATEADD()不对代码引入更多复杂性的情况下只调用 1 次函数。


推荐阅读