查找从上周日到下周日的事件

时间:2011-05-18 16:16:56

标签: mysql sql

如何找到本周加上下周日的MySQL数据?

给定日期(例如Wednesday 5/18/11),它会显示上一个星期日到下一个星期日的事件。 5/15/115/22/11

诀窍是找到给定日期的“前一个”星期日。

如何做到这一点?

3 个答案:

答案 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。