mysql数据库中有没有什么方法可以返回两个日期之间的月和日的差值。例如,如果我提供01-01-2018作为起始日期,02-02-2018作为今天,我希望得到结果为1个月1天。
发布于 2018-01-29 18:58:17
SELECT FLOOR(DATEDIFF('2018-02-01', '2018-01-01')/30) AS months, DATEDIFF('2018-02-01', '2018-01-01')%30 AS days;唯一的问题是,is将月份计算为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;您应该将日期作为变量插入(将'2018-01-01‘替换为fromdate,将'2018-02-02’替换为todate__)。
说明:
它有2个月和天的案例:
todate月份的日期大于(或等于) fromdate月份的日期。在这种情况下,月数是年数* 12 + todate的月数,减去fromdate的相同计算。天数仅仅是todate的天数减去fromdate.todate月份的日期小于fromdate月份的日期。在本例中,月数是年数* 12 + todate的月数,减去fromdate的相同计算结果减去1(因为月份不是“满”的)。天数是fromdate月份的最后一天,减去fromdate日期,再加上todate月份的日期。或者换句话说:从该月的某一天开始,fromdate月份经过的天数加上todate.月份经过的天数
https://stackoverflow.com/questions/48498995
复制相似问题