如何计算MySQL中几个月的两个日期之间的差异

Awa*_*wan 9 mysql date

我在MySQL表中有两列:

  • DateOfService(datetime)
  • 出生日期(日期)

我想运行一个MySQL查询,它将在几个月内提供这两个字段之间的日期差异.

我如何在MySQL选择查询中执行此操作?

谢谢.

Zan*_*ien 43

看看MySQL 中的TIMESTAMPDIFF()函数.

这允许你做的是传入两个TIMESTAMPDATETIME值(或甚DATE至MySQL将自动转换)以及你想要根据你的差异的时间单位.

您可以MONTH在第一个参数中指定为单位:

SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
-- 0
Run Code Online (Sandbox Code Playgroud)
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')
-- 1
Run Code Online (Sandbox Code Playgroud)
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')
-- 1
Run Code Online (Sandbox Code Playgroud)
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')
-- 7
Run Code Online (Sandbox Code Playgroud)

它基本上获取参数列表中从第一个日期开始经过的月数.该解决方案考虑了每个月(28,30,31)和闰年的不同天数.


如果你想要经过几个月的十进制精度,那就更复杂了,但是你可以这样做:

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
  )
Run Code Online (Sandbox Code Playgroud)

在哪里startdateenddate在你的日期参数,无论是从一个表或从脚本输入参数的两个日期列:

例子:

With startdate = '2012-05-05' AND enddate = '2012-05-27':
-- Outputs: 0.7097
Run Code Online (Sandbox Code Playgroud)
With startdate = '2012-05-05' AND enddate = '2012-06-13':
-- Outputs: 1.2667
Run Code Online (Sandbox Code Playgroud)
With startdate = '2012-02-27' AND enddate = '2012-06-02':
-- Outputs: 3.1935
Run Code Online (Sandbox Code Playgroud)


Mar*_*rco 8

这可能有效:

SELECT 12 * (YEAR(DateOfService) 
              - YEAR(BirthDate)) 
       + (MONTH(DateOfService) 
           - MONTH(BirthDate)) AS months 
FROM table
Run Code Online (Sandbox Code Playgroud)