MySQL中减号运算符在两个日期时间之间的行为是什么



到日期时间之间的差异是它们之间的秒数。这似乎只有在日期时间发生在同一个小时时才有效。

为什么会这样?

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会尽力猜测(而不是抛出错误),有时会很好,有时则不然。

相关内容

  • 没有找到相关文章

最新更新