SQL日期列比较:为何NULL日期被判定为晚于实际日期?
问题解答
这是SQL的预期行为,原因很明确:在SQL的逻辑运算规则里,任何与NULL的比较结果都会是NULL,而CASE语句只会在条件明确为TRUE时执行THEN分支,NULL会被判定为不满足条件,因此会走到ELSE分支返回No。
如果要改变这种逻辑(比如希望Date2为NULL时,判定有实际值的Date1更晚),可以用这些实用的处理技巧:
直接在条件里优先判断
Date2是否为NULL:case when Date2 is null then 'Yes' when Date1 > Date2 then 'Yes' else 'No' end用
COALESCE函数把NULL替换成一个极小的基准日期(比如远早于所有可能的Date1的日期),确保Date1必然大于该值:case when Date1 > COALESCE(Date2, '1900-01-01') then 'Yes' else 'No' end注:不同数据库有类似的替代函数,比如MySQL用
IFNULL、Oracle用NVL、SQL Server用ISNULL,COALESCE是ANSI标准,兼容性更强。要是你希望
Date2为NULL时返回其他结果(比如'Unknown'),直接调整CASE的分支逻辑即可。
内容的提问来源于stack exchange,提问作者Boris
相关产品推荐
相关产品推荐

