SELECT *
FROM `timetable`
WHERE `recurring` = 1 AND
DATE_ADD(`the_time`, INTERVAL 7 DAY) BETWEEN NOW() AND CAST(DATE_ADD(NOW(), INTERVAL 1 DAY) AS DATE)
字符串 说明:
我们寻找重复发生的事件
我们感兴趣的是当前时刻和第二天开始之间的事件
下一个日期的开始是通过在这个时刻加上一天并将其转换为日期来计算的
我把你的时间列命名为the_time,用你的时间列代替这个
在这周的晚些时候
SELECT *
FROM `timetable`
WHERE `recurring` = 1 AND
DATE_ADD(`the_time`, INTERVAL 7 DAY) BETWEEN NOW() AND CAST(DATE_ADD(NOW(), INTERVAL (7 - WEEKDAY(NOW())) DAY) AS DATE)
2条答案
按热度按时间rsl1atfo1#
假设你想要包括所有每周重复发生的事件,因为在你当前的周/日/小时之前总是会有一个事件。我还假设你想要所有在当前周之后发生的事件,而不管是哪一天,在当前周内,你想要所有在当前日之后发生的事件,而不管是哪一小时。
如果这一切都是正确的,那么你的条件就变成了:
字符串
luaexgnf2#
在那天的晚些时候
字符串
说明:
the_time
,用你的时间列代替这个在这周的晚些时候
型
这里的逻辑是一样的,除了在间隔的末尾,我们添加与一周剩余天数相同的天数,我们为星期一添加7天,为星期二添加6天,等等。
现在,
WEEKDAY
返回0表示星期一,1表示星期二,依此类推。所以,7周将导致我们想要的确切差异。
本月下旬
型
类似的查询,但与下个月开始。
一般说明
如果你可能在午夜发生事件,那么你可能想从间隔的最右端减去一秒,或者用
<=
和<
代替between
。同样,这样你就可以找到重复发生的事件,但是你只找到一次。所以,如果你每个星期五晚上都有一个星期五晚上的Karlings,并且计划从本月剩余时间开始发生两次,那么这个查询将只找到一次。
如果要在“月”视图中显示每月排定的重复事件的次数,可以使用联合查询或存储过程。