如何查找本週加上以下週日的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