首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL中计算月间两个日期的差值

问如何在MySQL中计算月间两个日期的差值
EN

Stack Overflow用户
提问于 2011-04-12 10:31:00
回答 7查看 56K关注 0票数 11

MySQL表中有两列:

(datetime)

  • BirthDate
  • DateOfService (date)

我希望运行一个MySQL查询,该查询将在几个月内提供这两个字段之间的日期差异。

如何在MySQL选择查询中做到这一点?

谢谢。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-04-12 10:36:47

这样做是可行的:

代码语言:javascript
复制
SELECT 12 * (YEAR(DateOfService) 
              - YEAR(BirthDate)) 
       + (MONTH(DateOfService) 
           - MONTH(BirthDate)) AS months 
FROM table
票数 10
EN

Stack Overflow用户

发布于 2012-07-30 08:27:21

查看一下函数在MySQL中。

这允许您传递两个TIMESTAMP或DATETIME值(甚至是DATE,因为MySQL将自动转换)以及您想要建立差异的时间单位。

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

代码语言:javascript
复制
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
-- 0

代码语言:javascript
复制
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')
-- 1

代码语言:javascript
复制
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')
-- 1

代码语言:javascript
复制
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')
-- 7

它基本上是从参数列表中的第一个日期开始计算出的月数。这个解决方案包括每个月的不同天数(28,30,31天)以及闰年。

如果您想要在经过的月数中获得十进制精度,这会稍微复杂一些,但是下面是您如何做到的:

代码语言:javascript
复制
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
  )

其中startdate和enddate是日期参数,无论是来自表中的两个日期列还是作为脚本的输入参数:

示例:

代码语言:javascript
复制
With startdate = '2012-05-05' AND enddate = '2012-05-27':
-- Outputs: 0.7097

代码语言:javascript
复制
With startdate = '2012-05-05' AND enddate = '2012-06-13':
-- Outputs: 1.2667

代码语言:javascript
复制
With startdate = '2012-02-27' AND enddate = '2012-06-02':
-- Outputs: 3.1935
票数 50
EN

Stack Overflow用户

发布于 2011-04-12 10:44:51

试试这个:

SELECT DATEDIFF(DateOfService, BirthDate) / 30 as months FROM ...

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

https://stackoverflow.com/questions/5633821

复制
相关文章

相似问题

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