2010-08-23 54 views
0

我只是试图插入两行与当前的日期时间,然后计算自该日期以来的经过时间。 下面是从我的表之后两次插入和使用NOW()函数来设置的时间戳的行:行的插入与用户id等于2后MySQL:当减去日期值和NOW()的奇怪结果

mysql> select * from pendingActivations; 
+--------+------------+---------------------+ 
| userId | code  | timestamp   | 
+--------+------------+---------------------+ 
|  2 | aaa  | 2010-08-23 17:04:02 | 
| 2345 | alkfjkla23 | 2010-08-23 16:59:53 | 
+--------+------------+---------------------+ 

几分钟,我执行以下命令,我希望能给我从每行的时间戳开始的时间。下面是结果:

mysql> select userId, code, timestamp, NOW() - timestamp as elapsedSeconds from pendingActivations; 
+--------+------------+---------------------+----------------+ 
| userId | code  | timestamp   | elapsedSeconds | 
+--------+------------+---------------------+----------------+ 
|  2 | aaa  | 2010-08-23 17:04:02 |  136.000000 | 
| 2345 | alkfjkla23 | 2010-08-23 16:59:53 | 4585.000000 | 
+--------+------------+---------------------+----------------+ 

我不知道第二行是如何有巨大elapsedSeconds值,它表明正是1小时16分25秒过去了,但很容易看出,仅有5围绕分钟过去了以来。

这里是表结构:

mysql> describe pendingActivations; 
+-----------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+-----------+-------------+------+-----+---------+-------+ 
| userId | int(11)  | NO | PRI | NULL |  | 
| code  | varchar(32) | NO | UNI | NULL |  | 
| timestamp | datetime | NO |  | NULL |  | 
+-----------+-------------+------+-----+---------+-------+ 

任何想法和/或解释?

回答

3

我无法解释这个问题,但我怀疑-操作返回结果在一个意想不到的格式(也许包括微秒或十分之一?)

我会用TIMEDIFF()

返回expr1 - expr2表示为时间值。 expr1和expr2是时间或日期和时间表达式,但都必须是相同的类型。

+2

+1我同意使用TIMEDIFF的建议。解释是MySQL将这些值视为yyyyMMddHHmmss格式的数值,然后对这些数值进行相减。 – 2010-08-23 15:46:21