我猜你正在寻找这样的东西
SELECT *
FROM table1
WHERE date BETWEEN CURDATE() + INTERVAL 0 - WEEKDAY(CURDATE()) DAY
AND CURDATE() + INTERVAL 6 - WEEKDAY(CURDATE()) DAY
此查询将获取date
列位于当前日历周(从星期一到星期日)边界内的行。
WEEKDAY()
函数 返回日期的工作日索引(0 = 星期一,1 = 星期二,... 6 = 星期日)。表达方式
CURDATE() + INTERVAL 0 - WEEKDAY(CURDATE()) DAY
返回当前日历周的星期一的日期,并且
CURDATE() + INTERVAL 6 - WEEKDAY(CURDATE()) DAY
返回当前日历周的星期日的日期。使用BETWEEN
inWHERE
子句可确保查询仅返回date
值介于这两个日期(周一至周日)之间的行。
注意:确保您在date
列上有索引。此查询是索引友好的。
今天日期(2013 年 9 月 19 日)的示例输出:
+--------+------------+----------------+
| 编号 | 日期 | 内容 |
+--------+------------+----------------+
| 1 | 2013-09-16 | 内容 1 这里 |
+--------+------------+----------------+
更新:要获取上一个日历周的记录,您只需从两个值中减去 1 周间隔BETWEEN
SELECT *
FROM table1
WHERE date
BETWEEN CURDATE() + INTERVAL 0 - WEEKDAY(CURDATE()) DAY - INTERVAL 1 WEEK,
AND CURDATE() + INTERVAL 6 - WEEKDAY(CURDATE()) DAY - INTERVAL 1 WEEK