我有以下代码行可以返回 2 个条件之一("已过期"、"活动")。我需要用DATEDIFF
来计算我需要的日期。
但是,现在我需要更改此代码,以便在 2 个条件都不满足并导致"未知"的情况下,我可以添加一种 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