私はあなたがこのようなものを探していると思います
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
と、これら 2 つの日付 (月曜から日曜) の間にある値を持つ行のみがクエリで返されるようになります。
注:date
列にインデックスがあることを確認してください。このクエリはインデックスに適しています。
今日の日付 (2013 年 9 月 19 日) の出力例:
+-----+------------+----------------+
| | ID | 日付 | コンテンツ |
+-----+------------+----------------+
| | 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