如何查找本周加上以下周日的MySQL数据?查找上周日至下周日的活动
给定一个日期(例如Wednesday 5/18/11
),它会显示前一个星期日到下一个星期日的事件。 5/15/11
到5/22/11
。
诀窍是找到给定日期的“上一个”星期日。
这怎么办?
如何查找本周加上以下周日的MySQL数据?查找上周日至下周日的活动
给定一个日期(例如Wednesday 5/18/11
),它会显示前一个星期日到下一个星期日的事件。 5/15/11
到5/22/11
。
诀窍是找到给定日期的“上一个”星期日。
这怎么办?
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列上使用任何索引。最好在边界的周日找到实际的日期,然后做一下BETWEEN或< => =。这应该允许在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子句中的比较运算符来获得你想要的行为。
我之前在SO上发布了code for a calendar table。它适用于PostgreSQL,但您应该可以在不太麻烦的情况下适应MySQL。
如果范围应该包含星期日,那么您将需要考虑这一点,以及我相信。 – 2011-05-18 16:44:51
@Tom这就是为什么我在那里有OR子句。 – Pentium10 2011-05-18 20:04:30
我没有方便的mySQL DB,但是只有当NOW()在某一天时,OR才会生效。我不明白在所有情况下这将如何返回8天的范围。如果Weekday(NOW())<> 6,那么您只能获得一个星期的日期。我想你会需要一个关于平日(事件日期)的OR。 – 2011-05-18 20:11:57