到日期时间之间的差异是它们之间的秒数。这似乎只有在日期时间发生在同一个小时时才有效。
为什么会这样?
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,但我只是好奇为什么我会看到这个,或者它是否有文档记录。
MySQL只是尽其所能将字符串转换为数字,以便对其进行数学运算。在这种情况下,它只是去掉了所有非数字的冒号、破折号和空格。
试试这个:
SELECT (20110413155959 - 20110413160000) AS dates;
你的日期,没有所有阻止它们成为数字的东西-结果是-4041
回想一下,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 )
请参阅此处的文档,位起始于:
Date arithmetic also can be performed using INTERVAL
together with the + or - operator...
因此,使用-来计算两个日期之间的差异是不正确的。现在,当遇到不正确的输出时,MYSQL会尽力猜测(而不是抛出错误),有时会很好,有时则不然。