You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:03:13