gpt4 book ai didi

mysql - MySQL 中不同日期的两个时间之间的差异

转载 作者:行者123 更新时间:2023-11-29 14:24:48 25 4
gpt4 key购买 nike

我们有一个如下所示的查询:

SELECT
hd.definition_id,
hd.sun_end < hd.sun_start AS sunEndFirst,
(IF (
hd.sun_end IS NULL,
0,
IF(
hd.sun_start IS NULL,
0,
IF(hd.sun_end = hd.sun_start, 24, time_to_sec(timediff(hd.sun_end, hd.sun_start)) / 60)
)
))
FROM audit_hour_definition AS hd
WHERE hd.definition_id = 5
ORDER BY hd.definition_id

当两个时间相等时(例如 09:00:00-09:00:00),查询有效。当开始时间和结束时间在同一天(例如 02:00:00-16:00:00)时,查询有效。当开始时间和结束时间跨越午夜标记时,查询就会失败。例如,18:00:00-06:00:00 返回 -720,而我们需要 12。

有没有人有什么好的方法来处理这个问题?

编辑:所有时间列都使用 MySQL 的 TIME 数据类型。

最佳答案

强烈建议您在记录某些事件时避免仅使用TIME。正是针对这种情况。这将是适合您情况的最佳解决方案,因为只需更改类型即可消除所有转换。

如果由于某些原因这是不可能的,那么您需要以某种方式构建时间戳,即您需要一个日期部分。如果不存在,那么您如何确定 18:00:00-06:00:00 产生的是 12 小时而不是 36 小时?

不过,您可以使用以下构造:

SELECT
hd.definition_id,
hd.sun_end < hd.sun_start AS sunEndFirst,
IF(hd.sun_end IS NULL OR hd.sun_start IS NULL,
0,
IF(hd.sun_end = hd.sun_start, 24,
time_to_sec(timediff(
IF(hd.sun_end > hd.sun_start, hd.sun_end,
hd.sun_end + cast('24:00:00' as time)),
hd.sun_start)) / 60
)
)
FROM audit_hour_definition AS hd
WHERE hd.definition_id = 5
ORDER BY hd.definition_id;

关于mysql - MySQL 中不同日期的两个时间之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11194923/

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