Mysql 查找上周日到下周日的事件
如何查找本周和下周日的MySQL数据 给定一个日期,例如11年5月18日星期三,它将显示从前一个星期日到下一个星期日的事件。2011年5月15日至2011年5月22日 诀窍是找到给定日期的“前一个”周日Mysql 查找上周日到下周日的事件,mysql,sql,Mysql,Sql,如何查找本周和下周日的MySQL数据 给定一个日期,例如11年5月18日星期三,它将显示从前一个星期日到下一个星期日的事件。2011年5月15日至2011年5月22日 诀窍是找到给定日期的“前一个”周日 如何做到这一点?摘自奔腾的答案,并做了一些调整 SELECT * FROM events WHERE Yearweek(`eventdate`) = Yearweek(NOW()) OR ( Weekday(NOW()) = 6 AND Y
如何做到这一点?摘自奔腾的答案,并做了一些调整
SELECT *
FROM events
WHERE Yearweek(`eventdate`) = Yearweek(NOW())
OR ( Weekday(NOW()) = 6
AND Yearweek(`eventdate`) = Yearweek(
DATE_SUB(NOW(), INTERVAL 1 DAY)) )
SELECT
*
FROM
Events
WHERE
YEARWEEK(`eventdate`) = YEARWEEK(NOW()) OR
(
WEEKDAY(`eventdate`) = 6 AND
YEARWEEK(`eventdate`) = YEARWEEK(NOW()) + 1
)
这可能需要根据工作日为6星期日?的值进行调整
此外,虽然这应该可以工作,但我猜mySQL将无法使用此方法在eventdate列上使用任何索引。最好自己找出临近星期天的实际日期,然后在or=之间进行比较。这应该允许在eventdate上使用索引。即使现在没有索引,将来也可能需要使用索引。使用日历表
select cal_date
from calendar
where cal_date between
(select max(cal_date) from calendar
where cal_date <= '2011-05-15' and day_of_week = 'Sun') and
(select min(cal_date) from calendar
where cal_date > '2011-05-15' and day_of_week = 'Sun')
如果给定的日期是星期天,则不清楚您想要什么。前面的查询返回15行,给定的日期是星期天。它返回所有其他日期的8行。可以调整WHERE子句中的比较运算符以获得所需的行为
我早些时候发了一封信。这是针对PostgreSQL的,但您应该能够轻松地将其应用于MySQL。如果范围应该包括两个星期天,那么我相信您也需要考虑这一点。@Tom这就是为什么我在那里有OR子句。我手头没有MySQL DB,但OR只有在某一天生效。我不认为在所有情况下,这将返回8天的范围。如果工作日现在是6天,那么你只有一周的约会。我想你需要一个关于工作日的OR。