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
相关产品推荐
相关产品推荐

