CURRENT_TIMESTAMP - updated_time与TIMESTAMPDIFF相同(SECOND,updated_time,CURRENT_TIMESTAMP)

问题描述:

我编写了一个sql来计算现在和上次更新时间之间的时间差异。首先,我只使用CURRENT_TIMESTAMP - updated_time,发现结果在时间单位秒内看起来正确。但它并不稳定,有时结果变得更大,正确。然后我改为TIMESTAMPDIFF(SECOND, updated_time, CURRENT_TIMESTAMP),一切都OK。我的问题是拖表达式的区别是什么?CURRENT_TIMESTAMP - updated_time与TIMESTAMPDIFF相同(SECOND,updated_time,CURRENT_TIMESTAMP)

+0

你有任何问题或者你想有更多的东西清除? – tukan

+1

我想知道更多关于mysql如何在它的sql引擎中解释“CURRENT_TIMESTAMP - updated_time”的细节。 – Dongqing

+0

我明白了,现在很清楚!我修改了我的答案是正确的,增加了一些例子。 – tukan

CURRENT_TIMESTAMP()CURRENT_TIMESTAMPNOW()的同义词,它为您提供当前的时间。

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_SECTIME_TO_SEC(CURRENT_TIMESTAMP) - updated_time