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

时间:2017-06-26 09:34:50

标签: mysql sql mariadb

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

1 个答案:

答案 0 :(得分:2)

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