【问题标题】:finding events from previous Sunday to next Sunday查找从上周日到下周日的活动
【发布时间】:2011-05-18 16:16:55
【问题描述】:

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

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

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

如何做到这一点?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    SELECT * 
    FROM   events 
    WHERE  Yearweek(`eventdate`) = Yearweek(NOW()) 
            OR ( Weekday(NOW()) = 6 
                 AND Yearweek(`eventdate`) = Yearweek( 
                     DATE_SUB(NOW(), INTERVAL 1 DAY)) ) 
    

    【讨论】:

    • 如果范围应该包括两个星期天,那么我相信你也需要考虑这一点。
    • @Tom 这就是我有 OR 子句的原因。
    • 我手边没有 mySQL 数据库,但 OR 仅在 NOW() 在某一天时才会生效。我看不出在所有情况下这将如何返回 8 天的范围。如果 Weekday(NOW()) 6 那么你只会得到一周的日期。我认为您需要一个关于 Weekday(eventdate) 的 OR。
    【解决方案2】:

    取自 Pentium 的答案,稍作调整...

    SELECT
        *
    FROM
        Events
    WHERE
        YEARWEEK(`eventdate`) = YEARWEEK(NOW()) OR
        (
            WEEKDAY(`eventdate`) = 6 AND
            YEARWEEK(`eventdate`) = YEARWEEK(NOW()) + 1
        )
    

    这可能需要根据 WEEKDAY 的值进行调整(是 6 号星期日?)。

    另外,虽然这应该可行,但我的猜测是 mySQL 将无法使用此方法在 eventdate 列上使用任何索引。最好自己找到相邻星期日的实际日期,然后执行 BETWEEN 或 =。这应该允许在 eventdate 上使用索引。即使您现在没有索引,您也可能希望将来使用它。

    【讨论】:

      【解决方案3】:

      使用日历表。 . .

      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。

      【讨论】:

        猜你喜欢
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多