gpt4 book ai didi

mysql - 跳过表中指定时间范围内的行

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

我有一个带有“ sleep 阶段”的作业表,但我不想返回介于 sleep_startsleep_end 之间的行。

CREATE TABLE `jobs` (
`job_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`sleep_start` time DEFAULT NULL,
`sleep_end` time DEFAULT NULL,
PRIMARY KEY (`account_id`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

每个作业都有一个不应调用的时间范围,该时间范围以时间格式指定 00:00:00

然后我想运行一个像

这样的查询
SELECT * FROM jobs WHERE TIME(NOW()) NOT BETWEEN sleep_start AND sleep_end

并且只找不 sleep 的工作。

现在,当 sleep_startsleep_end 在同一天且时间跨度不超过 00:00:00 时,这似乎有效>。发生这种情况时,总是返回这些行。

如何更改查询以使其适用于所有场景?

最佳答案

根据您对问题的描述,您的时间列代表一天中的时间,如果 sleep_start < sleep_end那么我们应该假设sleep_end是在第二天。

您只需要测试这两种情况。

SELECT * FROM jobs   
WHERE TIME(NOW()) NOT BETWEEN sleep_start AND sleep_end
AND NOT (sleep_start > sleep_end AND
(TIME(NOW()) >= sleep_start OR TIME(NOW()) <= sleep_end));

第一个检查(BETWEEN 子句)是 sleep_start <= sleep_end 的情况。但它不必明确检查,因为 NOW()除非是真的,否则他们之间永远不会存在。

后半部分确实包括对 sleep_start > sleep_end 的检查,如果是这种情况,它会检查 NOW()在较晚时间之后或在较早时间之前。

关于mysql - 跳过表中指定时间范围内的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43549551/

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