gpt4 book ai didi

mysql - mysql中是否有任何方法可以返回两个日期之间的月和日之差

转载 作者:行者123 更新时间:2023-11-29 17:59:33 27 4
gpt4 key购买 nike

mysql数据库中是否有任何方法可以返回两个日期之间的月和日之差。例如,如果我提供 01-01-2018 作为起始日期,02-02-2018 作为截止日期,我想得到 1 个月 1 天的结果。

最佳答案

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;

您应该将日期作为变量插入(将“2018-01-01”替换为 fromdate,将“2018-02-02”替换为 todate)。

说明:

月份和日期都有 2 个案例:

  • 情况 1:todate 月份的某一天高于(或等于)fromdate 月份的日期。在这种情况下,月数是年数 * 12 + todate 的月数。 ,减去 fromdate 的相同计算。天数就是 todate 的天数。减去 fromdate 的天数.
  • 情况 2:todate 月份的某一天低于 fromdate 月份的日期。在这种情况下,月数是年数 * 12 + todate 的月数。 ,减去 fromdate 的相同计算,负 1(因为该月未“满”)。天数是 fromdate 月份的最后一天,减去 fromdate 的日期,加上 todate 所在月份的日期。或者换句话说:fromdate 月份过去的天数自该月的某一天起,加上 todate 月份过去的天数.

关于mysql - mysql中是否有任何方法可以返回两个日期之间的月和日之差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48498995/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com