MySQL:在减去日期值和NOW()时出现奇怪的结果
我只是尝试用当前日期时间插入两行,然后计算自该日期以来经过的时间。 以下是我的表中插入两次并使用NOW()函数设置时间戳后的行:MySQL:在减去日期值和NOW()时出现奇怪的结果,mysql,datetime,time,timestamp,elapsedtime,Mysql,Datetime,Time,Timestamp,Elapsedtime,我只是尝试用当前日期时间插入两行,然后计算自该日期以来经过的时间。 以下是我的表中插入两次并使用NOW()函数设置时间戳后的行: mysql> select * from pendingActivations; +--------+------------+---------------------+ | userId | code | timestamp | +--------+------------+---------------------+ |
mysql> select * from pendingActivations;
+--------+------------+---------------------+
| userId | code | timestamp |
+--------+------------+---------------------+
| 2 | aaa | 2010-08-23 17:04:02 |
| 2345 | alkfjkla23 | 2010-08-23 16:59:53 |
+--------+------------+---------------------+
在插入userId等于2的行几分钟后,我执行了下面的命令,希望该命令能给出每一行从时间戳开始经过的时间。结果如下:
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 | |
+-----------+-------------+------+-----+---------+-------+
有什么想法和/或解释吗?我无法解释这个问题,但我怀疑
-
操作会以意外的格式返回结果(可能包括微秒或十分之一?)
我会用
返回表示为时间值的expr1
–expr2
。expr1和expr2是时间或日期和时间表达式,但两者必须是同一类型
+1我同意使用TIMEDIFF的建议。原因是MySQL将这些值视为yyyyMMddHHmmss格式的数值,然后对这些数值进行减法运算。