MySQL表中有两列:
(datetime)
我希望运行一个MySQL查询,该查询将在几个月内提供这两个字段之间的日期差异。
如何在MySQL选择查询中做到这一点?
谢谢。
发布于 2011-04-12 10:36:47
这样做是可行的:
SELECT 12 * (YEAR(DateOfService)
- YEAR(BirthDate))
+ (MONTH(DateOfService)
- MONTH(BirthDate)) AS months
FROM table发布于 2012-07-30 08:27:21
查看一下函数在MySQL中。
这允许您传递两个TIMESTAMP或DATETIME值(甚至是DATE,因为MySQL将自动转换)以及您想要建立差异的时间单位。
您可以在第一个参数中指定MONTH为单元:
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
-- 0SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')
-- 1SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')
-- 1SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')
-- 7它基本上是从参数列表中的第一个日期开始计算出的月数。这个解决方案包括每个月的不同天数(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
)其中startdate和enddate是日期参数,无论是来自表中的两个日期列还是作为脚本的输入参数:
示例:
With startdate = '2012-05-05' AND enddate = '2012-05-27':
-- Outputs: 0.7097With startdate = '2012-05-05' AND enddate = '2012-06-13':
-- Outputs: 1.2667With startdate = '2012-02-27' AND enddate = '2012-06-02':
-- Outputs: 3.1935发布于 2011-04-12 10:44:51
试试这个:
SELECT DATEDIFF(DateOfService, BirthDate) / 30 as months FROM ...
https://stackoverflow.com/questions/5633821
复制相似问题