How to calculate difference between two dates in months in MySQL

前端 未结 7 1603
眼角桃花
眼角桃花 2020-12-13 15:58

I have two columns in a MySQL table:

  • DateOfService (datetime)
  • BirthDate (date)

I want to run a MySQL query that will provide date diffe

7条回答
  •  庸人自扰
    2020-12-13 16:55

    Have a look at the TIMESTAMPDIFF() function in MySQL.

    What this allows you to do is pass in two TIMESTAMP or DATETIME values (or even DATE as MySQL will auto-convert) as well as the unit of time you want to base your difference on.

    You can specify MONTH as the unit in the first parameter:

    SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
    -- 0
    

    SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')
    -- 1
    

    SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')
    -- 1
    

    SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')
    -- 7
    

    It basically gets the number of months elapsed from the first date in the parameter list. This solution accounts for the varying amount of days in each month (28,30,31) as well as leap years.


    If you want decimal precision in the number of months elapsed, it's a little more complicated, but here is how you can do it:

    SELECT 
      TIMESTAMPDIFF(MONTH, startdate, enddate) +
      DATEDIFF(
        enddate,
        startdate + INTERVAL
          TIMESTAMPDIFF(MONTH, startdate, enddate)
        MONTH
      ) /
      DATEDIFF(
        startdate + INTERVAL
          TIMESTAMPDIFF(MONTH, startdate, enddate) + 1
        MONTH,
        startdate + INTERVAL
          TIMESTAMPDIFF(MONTH, startdate, enddate)
        MONTH
      )
    

    Where startdate and enddate are your date parameters, whether it be from two date columns in a table or as input parameters from a script:

    Examples:

    With startdate = '2012-05-05' AND enddate = '2012-05-27':
    -- Outputs: 0.7097
    

    With startdate = '2012-05-05' AND enddate = '2012-06-13':
    -- Outputs: 1.2667
    

    With startdate = '2012-02-27' AND enddate = '2012-06-02':
    -- Outputs: 3.1935
    

提交回复
热议问题