gpt4 book ai didi

MySQL 日期时间算法

转载 作者:可可西里 更新时间:2023-11-01 08:34:26 25 4
gpt4 key购买 nike

有人可以向我解释一下 MySQL 的这种行为吗?

查询:

SELECT NOW() + INTERVAL 90 SECOND - NOW() AS test;

结果:

  • 130 - 在 now() 处于 (00:00 - 00:29) 间隔的情况下

  • 170 - 在 now() 处于 (00:30 - 00:59) 间隔的情况下

我将 130 结果解释为“1 分 30 秒”。 170的结果很奇怪,我怀疑它与分钟溢出有关但我无法解释。

以下查询正常(我的意思是 - 如我所料):

select TIMEDIFF( DATE_ADD( now(), INTERVAL 90 SECOND), now()) AS test;

结果:00:01:30

最佳答案

最初,在我看来这是失败的原因是因为当时间间隔在日期之前时您不能减去。

SELECT INTERVAL 90 SECOND - NOW(); //..right syntax to use near '- NOW()'

manual状态:

INTERVAL expr unit is permitted on either side of the + operator if the expression on the other side is a date or datetime value. For the - operator, INTERVAL expr unit is permitted only on the right side, because it makes no sense to subtract a date or datetime value from an interval.

SELECT CAST(NOW() + INTERVAL 90 SECOND AS DATETIME) - CAST(NOW() AS DATETIME)

我也很可能将 130 解释为 1 分钟 30 秒,但似乎正在发生的是直接算术是通过减去时间部分(作为整数,而不是时间)来执行的。

对于 130:

SELECT CAST(NOW() + INTERVAL 90 SECOND AS DATETIME)
//June, 05 2013 13:10:50+0000

SELECT CAST(NOW() AS DATETIME)
//June, 05 2013 13:09:20+0000

SELECT CAST(NOW() + INTERVAL 90 SECOND AS DATETIME) - CAST(NOW() AS DATETIME)
//130

1050
- 920
------
130

对于 170:

SELECT CAST(NOW() + INTERVAL 90 SECOND AS DATETIME)
//June, 05 2013 13:12:11+0000

SELECT CAST(NOW() AS DATETIME)
//June, 05 2013 13:10:41+0000

SELECT CAST(NOW() + INTERVAL 90 SECOND AS DATETIME) - CAST(NOW() AS DATETIME)
//170

1211
- 1041
-------
170

但是,您应该使用日期函数(DATE_ADDDATE_SUB)来使用 INTERVAL,因为它们的目的是查看上面的内容如何返回130/170 当它应该返回 90 时。

关于MySQL 日期时间算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16940687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com