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

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

例如:

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

天差是 3。

【问题讨论】:

    标签: mysql date


    【解决方案1】:

    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()方法的第一个参数必须大于第二个参数,否则返回负值。
    【解决方案2】:

    使用DATEDIFF() 函数。

    文档中的示例:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案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】:
          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
          

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

              猜你喜欢
              • 2011-01-30
              • 2022-12-01
              • 2017-10-24
              • 1970-01-01
              • 2014-10-07
              • 1970-01-01
              • 2021-11-15
              • 1970-01-01
              相关资源
              最近更新 更多