mysql - 将 mysql datediff 与 elseif 或 case 语句一起使用

标签 mysql

我有以下代码行,可以返回两个条件之一(“已过期”、“有效”)。我需要使用 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 ...

所以,目前,我已过期、有效,但我还想将其他“未知”作为选项包含在内。我该如何改变这个逻辑?我需要使用 ELSEIFCASE 吗?我应该使用什么?

最佳答案

使用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/

相关文章:

mysql - 如何从 MySQL 中特定值的时间戳获取小时数?

c# - 如何通过MySqlReader C#读取多个请求

php - 如何修复我的代码以使用 php、mysql 在数组中保存 3 个值来进行调查?

MySQL - 将员工链接到发票#

mysql - 从列值中提取年份和月份值并插入到 MYSQL 中

MySQL:对 GROUP_CONCAT 值进行排序

MySQL查询内部查询

mysql - 无法运行 Hive 子查询

php - MYSQL_FETCH_ARRAY 参数资源错误。

mysql - Debezium MySql 连接器 : Table snapshots are taken in a single thread?