gpt4 book ai didi

仅两个 TIME 之间的 MySQL TIMEDIFF(不是 DATETIME)

转载 作者:行者123 更新时间:2023-11-30 23:45:19 25 4
gpt4 key购买 nike

我正在使用 MySQL 5.6

我有一张 table shift带列 start_time (时间)和 end_time (时间):

+------------+----------+
| start_time | end_time |
+------------+----------+
| 07:00:00 | 16:00:00 |
| 15:00:00 | 23:00:00 |
| 22:00:00 | 07:00:00 |
| 12:00:00 | 21:00:00 |
| 12:00:00 | 09:00:00 |
| 10:00:00 | 20:00:00 |
| 23:00:00 | 01:00:00 |
| 21:00:00 | 05:00:00 |
+------------+----------+

我想找到将在接下来的 15 分钟内结束的所有类次。以上是样本数据,顺便说一句,它也可以有分钟。

这是我试过的:

SELECT start_time, end_time
FROM shift
WHERE TIME_TO_SEC(TIMEDIFF(end_time, TIME(NOW()))) < 900;

结果:

+------------+----------+
| start_time | end_time |
+------------+----------+
| 22:00:00 | 07:00:00 |
| 12:00:00 | 09:00:00 |
| 23:00:00 | 01:00:00 |
| 21:00:00 | 05:00:00 |
+------------+----------+

当我的表中没有任何夜类时(即当 start_time 大于 end_time 时),此查询应该有效。谁能帮我解决夜类的问题。

最佳答案

问题是 MySQL 假定两个时间都在同一天。所以当 end_time 时你会得到负面结果是过去,这将触发你的 < 900条件,给你太多的结果。

我看到有两种方法可以解决这个问题:

1:扩展条件去除负结果

SELECT start_time, end_time
FROM foo
WHERE TIME_TO_SEC(TIMEDIFF(end_time, TIME(NOW()))) > 0
AND TIME_TO_SEC(TIMEDIFF(end_time, TIME(NOW()))) < 900

2:更短的方法,将所有负值加上 24 小时。通常 MOD() 函数可以解决问题,但不知何故它在 MySQL 中无法做到这一点,因此您还需要将 24 小时添加到您的值中:

SELECT start_time, end_time
FROM foo
WHERE MOD(TIME_TO_SEC(TIMEDIFF(end_time, TIME(NOW()))) + 24*60*60, 24*60*60) < 900

关于仅两个 TIME 之间的 MySQL TIMEDIFF(不是 DATETIME),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41545693/

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