我有一个获取DATEDIFF
两个日期的子查询。但是第一个case
总是返回null
,而实际的子查询返回日期?!
CASE
WHEN [date1] > [date2]
THEN DATEDIFF(DD,getdate(),date1)
WHEN date1 < date2
THEN DATEDIFF(DD,getdate(),date2)
END[date diff]
FROM(
SELECT
licext.new_licenceId,
CASE
WHEN CONVERT(time,licext.new_EmergencyLicenceExpiryDate) like '%23:00:00.000%'
THEN DATEADD(dd,1,CONVERT(date,licext.new_EmergencyLicenceExpiryDate))
ELSE CONVERT(date,licext.new_EmergencyLicenceExpiryDate)
END [date1], --EM Code
CASE
WHEN CONVERT(time,licext.new_standardLicenceExpiryDate) like '%23:00:00.000%'
THEN DATEADD(dd,1,CONVERT(date,licext.new_standardLicenceExpiryDate))
ELSE CONVERT(date,licext.new_standardLicenceExpiryDate)
END [date2] --FRL
from new_licenceExtensionBase licext
)QUERY
第二种情况出现的原因是因为我正在使用的数据库datetime
以一种非常奇怪的方式存储,即)如果它最后有 23:00 它实际上意味着明天的日期?!(这是一个 Microsoft CRM 数据库) - 但那是完全不同的事情。
编辑:
它确实有一个 ELSE 子句,它在 date2 大于 date1 时工作得很好,因为正在评估它。例如,以下代码可以很好地获取今天和 date2 之间的差异:
CASE
WHEN [date1] > [date2]
THEN DATEDIFF(DD,getdate(),date1)
ELSE DATEDIFF(DD,getdate(),date2)
END[date diff]
编辑2:
我刚刚做了几个测试:使用选择返回日期工作正常。- 他们按预期返回。
测试 2:我WHEN
在查询中添加了三分之一,表示当日期为空时,返回 1990-01-01..但是它仍然返回null
,我的整个案例是否被跳过?
ELSE
你的 first中没有CASE
,这意味着如果你的WHEN
表达式都不匹配,那么它会返回NULL
。我的猜测是,您的逻辑下面存在一个问题,导致
date1
并且date2
始终相等,这会WHEN
在 firstCASE
和 return中错过您的 sNULL
。