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)
答
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
你有任何问题或者你想有更多的东西清除? – tukan
我想知道更多关于mysql如何在它的sql引擎中解释“CURRENT_TIMESTAMP - updated_time”的细节。 – Dongqing
我明白了,现在很清楚!我修改了我的答案是正确的,增加了一些例子。 – tukan