【问题标题】:How to get the number of days of difference between two dates on MySQL?如何获取 MySQL 上两个日期之间的差异天数?
【发布时间】:2011-01-30 05:11:30
【问题描述】:

我需要获取 MySQL 上几个日期中包含的天数。

例如:

  • 入住日期为12-04-2010
  • 退房日期15-04-2010

天差是 3。

【问题讨论】:

    标签: mysql date


    【解决方案1】:
        TIMESTAMPDIFF(DAY,STR_TO_DATE(date_format('2018-01-01', '%d-%m-%YYYY'),'%d-%m-%YYYY'), '2020-01-01') TOTAL_DAYS
    

    TOTAL_DAYS:730 天

    【讨论】:

      【解决方案2】:
      SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM  membership_dates md
      

      输出::

      id  entity_id    start_date            end_date             days
      
      1   1236      2018-01-16 00:00:00     2018-08-31 00:00:00    227
      2   2876      2015-06-26 00:00:00     2019-06-30 00:00:00   1465
      3   3880      1990-06-05 00:00:00     2018-07-04 00:00:00   10256
      4   3882      1993-07-05 00:00:00     2018-07-04 00:00:00   9130
      

      【讨论】:

        【解决方案3】:

        如果您想要一个比四舍五入的天数更准确的值:

        select timestampdiff(minute, min(date_col), max(date_col))/1440 from table
        

        【讨论】:

          【解决方案4】:

          请注意,如果您想计算两个日期之间的 FULL 24h 天,datediff 可能会为您返回错误的值。

          如文档所述:

          在计算中仅使用值的日期部分。

          导致

          select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')

          返回 1 而不是预期的 0。

          解决方案是使用select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); (注意与 datediff 相比,参数的顺序相反)。

          一些例子:

          • select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); 返回 0
          • select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00'); 返回 1
          • select timestampdiff(DAY, '2016-04-13 11:00:00', now()); 返回从 2016 年 4 月 13 日 11:00:00 到现在已经过去了多少完整的 24 小时

          希望它对某人有所帮助,因为起初并不清楚为什么 datediff 返回的值似乎出乎意料或错误。

          【讨论】:

          • 奇怪的是参数在datediff()timestampdiff() 之间翻转。
          【解决方案5】:

          获取当前日期到目标日期之间的天数

           SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;
          

          输出

           335
          

          【讨论】:

            【解决方案6】:

            我更喜欢TIMESTAMPDIFF,因为如果需要,您可以轻松更改单位。

            【讨论】:

              【解决方案7】:

              使用DATEDIFF() 函数。

              文档示例:

              SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
                  -> 1
              

              【讨论】:

                【解决方案8】:

                DATEDIFF 函数呢?

                引用手册页:

                DATEDIFF() 返回 expr1 – expr2 表示为从一开始的天数 约会对方。 expr1 和 expr2 是日期或日期和时间表达式。 只有值的日期部分是 用于计算


                在你的情况下,你会使用:

                mysql> select datediff('2010-04-15', '2010-04-12');
                +--------------------------------------+
                | datediff('2010-04-15', '2010-04-12') |
                +--------------------------------------+
                |                                    3 | 
                +--------------------------------------+
                1 row in set (0,00 sec)
                

                但请注意,日期应写为YYYY-MM-DD,而不是像您发布的DD-MM-YYYY

                【讨论】:

                • 是的,我在提问时忘记了日期格式;p 谢谢
                • P.S. YYYY-MM-DD 是 ISO 8601 标准,所以每个人都应该使用这个。很实用。
                • 注意datediff()方法的第一个参数必须大于第二个参数,否则返回负值。
                猜你喜欢
                • 2019-05-11
                • 2022-12-01
                • 2017-10-24
                • 1970-01-01
                • 2014-10-07
                • 1970-01-01
                • 2021-11-15
                • 1970-01-01
                相关资源
                最近更新 更多