我写了一个sql来计算现在和最后更新时间之间的时差。首先,我只使用CURRENT_TIMESTAMP - updated_time
,发现结果在时间单位秒内看起来是正确的。但它并不稳定,有时结果会变得更大而且更正确。然后我改为TIMESTAMPDIFF(SECOND, updated_time, CURRENT_TIMESTAMP )
,一切都好。我的问题是两个表达式的区别是什么?
答案 0 :(得分:2)
CURRENT_TIMESTAMP()
或CURRENT_TIMESTAMP
是NOW()
的同义词,用于显示您当前的时间。
<强> EDIT2:强>
在你的额外评论后,我明白你在问什么。 (我删除了第一个编辑),这是不完整的,有些不正确。
问题是:“解释CURRENT_TIMESTAMP - updated_time
的内部运作。”
解释(我走得更深):
CURRENT_TIMESTAMP
可以以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回日期和时间。
你可能会感到困惑的是,它可以根据上下文返回字符串或数值。
这里有一个数字上下文,因为你有 - (减号)运算符。
`String context`
SELECT CURRENT_TIMESTAMP();
-> '2017-07-04 08:50:26'
OR
`numeric context`
SELECT NOW() + 0;
-> 20170704085026
- (减号)运算符似乎只能工作:
mysql> insert into temp (first, second)
-> VALUES ('2017-07-01 03:00:00', '2017-07-01 03:01:00');
Query OK, 1 row affected (0.00 sec)
mysql> select first, second, second - first from temp;
+---------------------+---------------------+----------------+
| first | second | first - second |
+---------------------+---------------------+----------------+
| 2017-07-01 03:00:00 | 2017-07-01 03:00:37 | 37.000000 |
| 2017-07-01 03:00:00 | 2017-07-01 03:01:00 | 100.000000 |
+---------------------+---------------------+----------------+
2 rows in set (0.00 sec)
哦,太好了!一分钟100秒?我不这么认为! :)
要正确减去您的时间(如果updated_time
以秒为单位):
需要TIME_TO_SEC
:TIME_TO_SEC(CURRENT_TIMESTAMP) - updated_time