mysql数据库中是否有任何方法可以在几个月和几天内返回两个日期之间的差异。例如,如果我提供01-01-2018作为fromdate和02-02-2018作为todate我想得到结果为1个月1天。
答案 0 :(得分:0)
SELECT FLOOR(DATEDIFF('2018-02-01', '2018-01-01')/30) AS months, DATEDIFF('2018-02-01', '2018-01-01')%30 AS days;
唯一的问题是将月数计算为30天。因此,它没有考虑当月的天数。
<强>更新强>
将月份长度考虑在内的解决方案
SELECT
(CASE WHEN (DAY('2018-02-02') >= DAY('2018-01-01'))
THEN
(YEAR('2018-02-02')*12 + MONTH('2018-02-02')) - (YEAR('2018-01-01')*12 + MONTH('2018-01-01'))
ELSE
(YEAR('2018-02-02')*12 + MONTH('2018-02-02')) - (YEAR('2018-01-01')*12 + MONTH('2018-01-01')) - 1
END) AS months,
(CASE WHEN (DAY('2018-02-02') >= DAY('2018-01-01'))
THEN
DAY('2018-02-02') - DAY('2018-01-01')
ELSE
(DAY(LAST_DAY('2018-01-01')) - DAY('2018-01-01')) + DAY('2018-02-02')
END) AS days;
您应该将日期作为变量插入(将&#39; 2018-01-01&#39;替换为fromdate
和&#39; 2018-02-02&#39;替换为{{ 1}})。
<强>解释强>
月数和日数分别为2例:
todate
月份的某天高于(或等于)todate
月份的日期。在这种情况下,月数是年数* 12 + fromdate
的月数,减去todate
的相同计算。天数只是fromdate
的天数减去todate
的天数。fromdate
月份的某一天低于todate
月份的日期。在这种情况下,月数是年数* 12 + fromdate
的月数,减去todate
的相同计算,减去1(因为月份不是&#39;&# 39;全&#39)。天数是fromdate
月的最后一天,减去fromdate
的日期加上fromdate
的月份日期。或者换句话说:从该月的todate
月开始的天数,再加上fromdate
月份过去的天数。