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

SQL查询中DATEDIFF返回负值时替换为0的实现方法

实现方案

你可以通过以下几种常见SQL语法实现负值统一替换为0的需求:

  • 方案1:使用GREATEST函数(主流数据库通用,写法最简洁)
    GREATEST会自动返回多个输入值中的最大值,当过期天数计算结果为负时,和0比较后会直接返回0,符合需求。
    对应SQL代码:
SELECT Name,
GREATEST(DATEDIFF(expiration_date, CURRENT_DATE), 0) 
AS days
FROM MEDICINE;
  • 方案2:使用CASE表达式(全数据库兼容,符合SQL标准)
    如果你使用的数据库版本较老不支持GREATEST,可以用标准CASE分支判断实现,所有SQL数据库都支持该写法:
    对应SQL代码:
SELECT Name,
CASE WHEN DATEDIFF(expiration_date, CURRENT_DATE) < 0 THEN 0
ELSE DATEDIFF(expiration_date, CURRENT_DATE) END
AS days
FROM MEDICINE;
  • 方案3:使用IF函数(适用于MySQL等支持IF语法的数据库)
    属于简化的分支判断写法,逻辑和CASE一致:
    对应SQL代码:
SELECT Name,
IF(DATEDIFF(expiration_date, CURRENT_DATE) < 0, 0, DATEDIFF(expiration_date, CURRENT_DATE))
AS days
FROM MEDICINE;

内容的提问来源于stack exchange,提问作者ati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 23:36:01