gpt4 book ai didi

MySQL 两个时间戳之间的区别

转载 作者:行者123 更新时间:2023-11-29 05:45:59 25 4
gpt4 key购买 nike

我在返回数据时遇到问题。我有两次没有 00:00:00 的日期,我正在尝试比较它们。当前开启时间为 09:00:00,关闭时间当前为 02:00:00。正在比较的时间,因为在我的 SQL 中是 18:21:00,它介于开启和关闭时间之间,但我无法获得结果。

这是我的 SQL:

SELECT zdate
FROM zones
WHERE '18:21:00' BETWEEN time_on AND time_off

最佳答案

注意 ' x BETWEEN y AND z '假设y小于 z ;否则它永远不会返回任何东西。它等同于' x >= y AND x <= z '.

鉴于在这种情况下关闭时间是在午夜之后,那么您需要做一个更复杂的条件:

SELECT zdate
FROM zones
WHERE (time_on < time_off AND '18:21:00' BETWEEN time_on AND time_off)
OR (time_on > time_off AND ('18:21:00' > time_on OR '18:21:00' < time_off))

第一个条件是上类时间和下类时间在同一天的正常情况。第二种选择检查目标时间是在开始时间之后(隐含地在午夜之前)还是在休息时间之前(因此在午夜和休息时间之间)。

为了更大的对称性:

SELECT zdate
FROM zones
WHERE (time_on < time_off AND ('18:21:00' > time_on AND '18:21:00' < time_off))
OR (time_on > time_off AND ('18:21:00' > time_on OR '18:21:00' < time_off))

在 MacOS X 10.6.2 上使用 IBM Informix Dynamic Server (IDS) 11.50.FC4W1 的示例输出。 IDS 使用“DATETIME HOUR TO SECOND”作为标准 SQL 中 TIME 类型的等价物。

CREATE TEMP TABLE zones
(
time_on DATETIME HOUR TO SECOND NOT NULL,
time_off DATETIME HOUR TO SECOND NOT NULL
);
INSERT INTO zones VALUES ('09:00:00', '02:00:00');
INSERT INTO zones VALUES ('07:00:00', '19:00:00');
INSERT INTO zones VALUES ('20:00:00', '22:00:00');
INSERT INTO zones VALUES ('10:00:00', '15:15:00');
INSERT INTO zones VALUES ('21:00:00', '04:00:00');

CREATE TEMP TABLE times
(
zdate DATETIME HOUR TO SECOND NOT NULL
);
INSERT INTO times VALUES ('18:21:00');
INSERT INTO times VALUES ('08:30:00');
INSERT INTO times VALUES ('20:30:00');
INSERT INTO times VALUES ('12:30:00');

SELECT zdate, time_on, time_off
FROM zones CROSS JOIN times
WHERE (time_on < time_off AND (zdate > time_on AND zdate < time_off))
OR (time_on > time_off AND (zdate > time_on OR zdate < time_off))
ORDER BY zdate, time_on, time_off

输出数据:

08:30:00   07:00:00   19:00:00
12:30:00 07:00:00 19:00:00
12:30:00 09:00:00 02:00:00
12:30:00 10:00:00 15:15:00
18:21:00 07:00:00 19:00:00
18:21:00 09:00:00 02:00:00
20:30:00 09:00:00 02:00:00
20:30:00 20:00:00 22:00:00

我认为这看起来是正确的。

关于MySQL 两个时间戳之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1943889/

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