我想比较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
你有其他想法吗?
答案 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;