如何找到本周加上下周日的MySQL数据?
给定日期(例如Wednesday 5/18/11
),它会显示上一个星期日到下一个星期日的事件。 5/15/11
到5/22/11
。
诀窍是找到给定日期的“前一个”星期日。
如何做到这一点?
答案 0 :(得分:2)
SELECT *
FROM events
WHERE Yearweek(`eventdate`) = Yearweek(NOW())
OR ( Weekday(NOW()) = 6
AND Yearweek(`eventdate`) = Yearweek(
DATE_SUB(NOW(), INTERVAL 1 DAY)) )
答案 1 :(得分:0)
从奔腾的回答中得出一些调整......
SELECT
*
FROM
Events
WHERE
YEARWEEK(`eventdate`) = YEARWEEK(NOW()) OR
(
WEEKDAY(`eventdate`) = 6 AND
YEARWEEK(`eventdate`) = YEARWEEK(NOW()) + 1
)
这可能需要根据WEEKDAY的值进行调整(星期日是6?)。
此外,虽然这应该有效,但我的猜测是mySQL将无法使用此方法在eventdate列上使用任何索引。最好找到边界星期日的实际日期,然后做BETWEEN或< => =。这应该允许在eventdate上使用索引。即使您现在没有索引,也可能希望将来使用索引。
答案 2 :(得分:0)
使用日历表。 。
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子句中调整比较运算符以获得所需的行为。
我之前在SO上发布了code for a calendar table。它适用于PostgreSQL,但你应该能够毫不费力地将它适应MySQL。