首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql中是否有任何方法可以返回两个日期之间的差值(以月和日为单位

问mysql中是否有任何方法可以返回两个日期之间的差值(以月和日为单位
EN

Stack Overflow用户
提问于 2018-01-29 18:24:02
回答 1查看 39关注 0票数 0

mysql数据库中有没有什么方法可以返回两个日期之间的月和日的差值。例如,如果我提供01-01-2018作为起始日期,02-02-2018作为今天,我希望得到结果为1个月1天。

EN

回答 1

Stack Overflow用户

发布于 2018-01-29 18:58:17

代码语言:javascript
复制
SELECT FLOOR(DATEDIFF('2018-02-01', '2018-01-01')/30) AS months, DATEDIFF('2018-02-01', '2018-01-01')%30 AS days;

唯一的问题是,is将月份计算为30天。因此,它不考虑当前月份的天数。

更新:

考虑的月份长度解决方案

代码语言:javascript
复制
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个月和天的案例:

  • Case 1:todate月份的日期大于(或等于) fromdate月份的日期。在这种情况下,月数是年数* 12 + todate的月数,减去fromdate的相同计算。天数仅仅是todate的天数减去fromdate.
  • Case 2的天数:todate月份的日期小于fromdate月份的日期。在本例中,月数是年数* 12 + todate的月数,减去fromdate的相同计算结果减去1(因为月份不是“满”的)。天数是fromdate月份的最后一天,减去fromdate日期,再加上todate月份的日期。或者换句话说:从该月的某一天开始,fromdate月份经过的天数加上todate.

月份经过的天数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48498995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档