使用这个MYSQL语法,我可以获得从明天到today+30天的所有日期,间隔1小时,从14点到18点。
SELECT
DATE_ADD(DATE_ADD(DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY), INTERVAL day.seq DAY), INTERVAL hour.seq HOUR) as freetime
FROM
seq_0_to_30 AS day,
seq_14_to_18 AS hour
HAVING freetime NOT IN ( SELECT `start` FROM `events`);
having行应该在表events中搜索预订的事件。此表中有像start和end这样的列。例如:
start: 2021-07-20 16:00:00
end: 2021-07-20 17:00:00
此日期/时间不应显示为freetime。这与上面的语法一起工作。但。如果我有一个像这样的预订事件:
start: 2021-07-20 16:00:00
end: 2021-07-20 19:00:00
(超过1个小时),我的查询不能正常工作。我是这样获取freetime的:
2021-07-01 14:00:00
2021-07-01 15:00:00
2021-07-01 17:00:00
2021-07-01 18:00:00
这是正确的,因为我在having行中只检查了起始值。我必须如何修改查询,这两个值(开始和结束)将被检查。
正确的结果应该是:
2021-07-01 14:00:00
2021-07-01 15:00:00
因为从16号到18号是我的事件表中的一个事件。
发布于 2021-06-30 14:19:48
seq_0_to_30 AS day
是一个可爱的特性,但它是针对MariaDB的,而不是针对MySQL的
发布于 2021-06-30 14:35:23
我不能评论,所以我会在你看到这篇文章后发表并删除。您可以在insert into后面加上',‘而不是';’,这就是显示结果2021-07-01 16:00:00的原因
https://stackoverflow.com/questions/68195639
复制相似问题