日期时间之间的差异是它们之间的秒数。这似乎仅在日期时间在同一小时内发生时才有效。
这是为什么?
mysql> update events set created_at = "2011-04-13 15:59:59", fulfilled_at ="2011-04-13 16:00:00" where id = 1;
mysql> select fulfilled_at - created_at, timediff(fulfilled_at, created_at) from events where id = 1;
+---------------------------+------------------------------------+
| fulfilled_at - created_at | timediff(fulfilled_at, created_at) |
+---------------------------+------------------------------------+
| 4041.000000 | 00:00:01 |
+---------------------------+------------------------------------+
我知道我应该使用timediff,但我只是好奇为什么我会看到这个或者是否在某处记录过。
答案 0 :(得分:7)
MySQL只是尽可能地将字符串转换为数字,以便它可以对它们进行数学运算。在这种情况下,它只是剥离所有非数字冒号,破折号和空格。
试试这个:
SELECT (20110413155959 - 20110413160000) AS dates;
您的日期,没有阻止他们成为数字的所有内容 - 结果是 -4041
答案 1 :(得分:6)
回想一下,mysql有两种不同类型的与日期时间相关的子类: _SUB 后缀用于减去日期减去间隔,返回日期。 _DIFF 后缀用于获取两个日期之间的差异,返回间隔(顺便说一句,请注意,只有第一个具有反向模拟:的 _add 强>)
+/-符号将用于第一个(ADD / SUB),因此MYSQL期望将间隔作为第二个参数。
DATE = DATE_ADD(DATE,INTERVAL) Also accepts +
DATE = DATE_SUB(DATE,INTERVAL) Also accepts -
INTERVAL = DATE_DIFF(DATE,DATE )
请参阅文档here,该位从:
开始Date arithmetic also can be performed using INTERVAL
together with the + or - operator...
因此,使用 - 来取两个日期之间的差异是不正确的。现在,MYSQL在面对不正确的输出时,会尝试做出最好的猜测(而不是抛出错误),有时这样做会很顺利,有时候不会。