【发布时间】:2011-05-18 16:16:55
【问题描述】:
如何找到本周和下周日的 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)) )
【讨论】:
取自 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 上使用索引。即使您现在没有索引,您也可能希望将来使用它。
【讨论】:
使用日历表。 . .
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。
【讨论】: