MySQL:以月为单位的日期差异(即使'月'<30天应该算作1)

时间:2014-12-10 14:21:09

标签: mysql sql datediff

我想比较2个日期:'2012-05-05','2012-06-04',结果收到1(5月和6月之间的差异)。

我得到了什么:

SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04') as difference
-- output: 0

我正在寻找一个查询,我将收到 1 的结果(日期来自2个不同的月份;如果差异实际上是<30天则不重要)。

我试过了:

SELECT TIMESTAMPDIFF(MONTH, DATE_FORMAT('2012-05-05','%Y-%m'), DATE_FORMAT('2012-06-04','%Y-%m') ) as difference
-- output: NULL

也:

SELECT DATEDIFF( DATE_FORMAT('2012-05-05','%Y-%m'), DATE_FORMAT('2012-06-04','%Y-%m') ) as difference
-- output: NULL

你有其他想法吗?

2 个答案:

答案 0 :(得分:2)

我不知道是否有办法用这个功能做,但你可以做一个简单的案例......显然可以改进。

CASE
 WHEN DAYS <=30 THEN 1
 WHEN DAYS BETWEEN 31 and 60 THEN 2
 --ELSE ....
END as MONTH_DIFF

还找到了此解决方案here

SELECT 12 * (YEAR(DateOfService) 
              - YEAR(BirthDate)) 
       + (MONTH(DateOfService) 
           - MONTH(BirthDate)) AS months 
FROM table

答案 1 :(得分:2)

在 mysql 文档中有函数 PERIOD_DIFF 返回周期 P1 和 P2 之间的月数。 P1 和 P2 的格式应为 YYMM 或 YYYYMM。

SELECT PERIOD_DIFF('201205', '201206') as difference

如果你从日期时间值,使用 DATE_FORMAT。如:

SELECT PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'),DATE_FORMAT(YOURCOLUMN, '%Y%m')) AS difference 
FROM YOURTABLE;