将 MySQL Datediff 与 elseif 或 case 语句一起使用



我有以下代码行可以返回 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 

最新更新