我正在计算两个日期时间字段之间的月数。
有没有比获取 Unix 时间戳然后除以 2 592 000(秒)并在 MySQL 中四舍五入更好的方法?
最佳答案
任何给定两个日期之间的月差:
我很惊讶这还没有被提及:
看看TIMESTAMPDIFF() MySQL 中的函数。
这允许你做的是传入两个 TIMESTAMP
或 DATETIME
值(甚至是 DATE
因为 MySQL 会自动转换)以及您想要基于的时间单位。
您可以在第一个参数中指定MONTH
为单位:
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
-- Outputs: 0
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')
-- Outputs: 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')
-- Outputs: 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')
-- Outputs: 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.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
关于mysql - 如何使用 MySQL 查询在月份中获取两个日期之间的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/288984/