2011-05-18 32 views
3

如何查找本週加上以下週日的MySQL數據?查找上週日至下週日的活動

給定一個日期(例如Wednesday 5/18/11),它會顯示前一個星期日到下一個星期日的事件。 5/15/115/22/11

訣竅是找到給定日期的「上一個」星期日。

這怎麼辦?

回答

2
SELECT * 
FROM events 
WHERE Yearweek(`eventdate`) = Yearweek(NOW()) 
     OR (Weekday(NOW()) = 6 
      AND Yearweek(`eventdate`) = Yearweek( 
       DATE_SUB(NOW(), INTERVAL 1 DAY))) 
+0

如果範圍應該包含星期日,那麼您將需要考慮這一點,以及我相信。 – 2011-05-18 16:44:51

+0

@Tom這就是爲什麼我在那裏有OR子句。 – Pentium10 2011-05-18 20:04:30

+0

我沒有方便的mySQL DB,但是隻有當NOW()在某一天時,OR纔會生效。我不明白在所有情況下這將如何返回8天的範圍。如果Weekday(NOW())<> 6,那麼您只能獲得一個星期的日期。我想你會需要一個關於平日(事件日期)的OR。 – 2011-05-18 20:11:57

0

從奔騰的回答服用,有一些調整...

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

這可能需要根據平日的值進行調整(6日?)。

此外,雖然這應該工作,我的猜測是mySQL將無法使用此方法在eventdate列上使用任何索引。最好在邊界的週日找到實際的日期,然後做一下BETWEEN或< => =。這應該允許在eventdate上使用索引。即使你現在沒有索引,你也許會在將來使用它。

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。

相關問題