我有一个包含两个 DATETIME 值的数据库,然后我从中生成一些新值:
tdiff = timediff(d1,d2)+0
day1 = truncate(tdiff/60.0/60.0/24.0,0)
day2 = datediff(d1,d2)+0
所有这三个“变量”都是(临时)数据库中的 FLOAT 字段。我预计这一点,day1
并且day2
差异永远不会超过 1 或 2。但是,有些值似乎会产生一个疯狂的答案 - 它们往往是tdiff
. 计算来自的值tdiff
表明计算是正确的。
从概念上讲,day2 应该是 DATETIME 值的日期之间的差异,day1 应该是同一时间范围内的 24 小时周期数。
最大的区别在于 timediff 的最大值:使用计算,24 小时周期的数量刚刚超过 97。但是,使用 DATEDIFF 函数显示的时间跨度低至 60 天。这是没有意义的。
当 TIMEDIFF 结果为 26 个 24 小时周期时,也存在很大差异:DATEDIFF 报告为 10 天 - 或者 TIMEDIFF 结果为 30 个 24 小时周期,而 DATEDIFF 报告为 11 天。TIMEDIFF 报告 79 天时也存在差异,但 DATEDIFF 给出 29 天。
以下是示例输出 - 来自 Ruby 脚本(并采用 Ruby 数组格式) - 包含 d1、d2、TIMEDIFF、24 小时周期、DATEDIFF 列:
["2012-04-11 06:15:21", "2012-02-09 22:11:21", "8.38596e+06", "97", "62"]
["2012-04-11 06:15:22", "2012-02-09 22:13:24", "8.38596e+06", "97", "62"]
["2012-04-11 06:15:25", "2012-02-09 22:15:29", "8.38596e+06", "97", "62"]
["2012-04-11 05:47:25", "2012-03-31 05:07:01", "2.64402e+06", "30", "11"]
["2012-04-11 05:47:26", "2012-03-31 05:09:03", "2.64382e+06", "30", "11"]
["2012-04-11 05:47:27", "2012-03-31 05:27:21", "2.64201e+06", "30", "11"]
["2012-04-11 05:48:43", "2012-01-27 16:39:32", "8.38596e+06", "97", "75"]
["2012-04-11 05:49:00", "2012-04-01 19:58:00", "2.2551e+06", "26", "10"]
["2012-04-11 05:49:00", "2012-04-01 20:00:02", "2.25486e+06", "26", "10"]
["2012-04-11 05:49:00", "2012-04-01 20:02:04", "2.25466e+06", "26", "10"]
["2012-04-11 05:49:05", "2012-04-01 20:04:04", "2.2545e+06", "26", "10"]
["2012-04-11 05:49:06", "2012-04-01 20:06:06", "2.2543e+06", "26", "10"]
["2012-04-11 05:49:06", "2012-01-27 17:36:07", "8.38596e+06", "97", "75"]
["2012-04-11 05:49:07", "2012-04-01 20:08:10", "2.25406e+06", "26", "10"]
["2012-04-11 06:15:06", "2012-03-13 12:23:24", "6.89514e+06", "79", "29"]
["2012-04-11 06:15:07", "2012-03-13 12:25:25", "6.89494e+06", "79", "29"]
为什么这些计算如此不同?我假设这是对 TIMEDIFF 缺乏了解,但我错过了什么?