我有以下代码行,可以返回两个条件之一(“已过期”、“有效”)。我需要使用 DATEDIFF
来计算出我需要的日期。
但是,现在我需要更改此代码,以便在这两个条件均不满足且结果为“未知”时添加一种 else if 条件。
到目前为止我有这个:
SELECT
IF(DATEDIFF(@endDate:=ADDDATE(h.StartDate,Interval h.NumMonth Month),NOW())<0,'Expired',
IF(DATEDIFF(@endDate,NOW())<120,'Expires in 120 days or less','Active')) AS bActive
FROM ...
所以,目前,我已过期、有效,但我还想将其他“未知”作为选项包含在内。我该如何改变这个逻辑?我需要使用 ELSEIF
或 CASE
吗?我应该使用什么?
最佳答案
使用case
而不是if
。首先,case
是 ANSI 标准,因此它可以跨数据库工作。其次,它可以更好地处理多种情况。我认为你的逻辑是:
SELECT (CASE WHEN DATEDIFF(ADDDATE(h.StartDate, Interval h.NumMonth Month), NOW()) < 0
THEN 'Expired'
WHEN DATEDIFF(ADDDATE(h.StartDate, Interval h.NumMonth Month), NOW()) < 120
THEN 'Expires in 120 days or less'
ELSE 'Active'
END) AS bActive
关于mysql - 将 mysql datediff 与 elseif 或 case 语句一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28177772/