我在MySQL表中有两列:
我想运行一个MySQL查询,它将在几个月内提供这两个字段之间的日期差异.
我如何在MySQL选择查询中执行此操作?
谢谢.
Zan*_*ien 43
看看MySQL 中的TIMESTAMPDIFF()函数.
这允许你做的是传入两个TIMESTAMP或DATETIME值(或甚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)
在哪里startdate和enddate在你的日期参数,无论是从一个表或从脚本输入参数的两个日期列:
例子:
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)
这可能有效:
SELECT 12 * (YEAR(DateOfService)
- YEAR(BirthDate))
+ (MONTH(DateOfService)
- MONTH(BirthDate)) AS months
FROM table
Run Code Online (Sandbox Code Playgroud)