MySQLは1日(日曜日)から始まります。CURDATE()
代わりにを使用NOW()
して時間部分を切り捨てて、日付のみを操作し、呼び出しDATE(date_row)
てそこでも切り捨てるようにします。
今日が金曜日の場合は、7日を追加します。今日が金曜日ではなく金曜日より前の場合は、(6-今日の平日)を追加します。今日が土曜日の場合は、6日追加します。
WHERE
DATE(date_row) BETWEEN CURDATE() AND
DATE_ADD(CURDATE(), INTERVAL (
/* It's Friday, add 7 */
IF(DAYOFWEEK(CURDATE())=6, 7,
/* It's Saturday, add 6 */
IF(DAYOFWEEK(CURDATE())=7, 6,
/* All other days, add 6 - weekday */
(6 -DAYOFWEEK(CURDATE())))))
DAY )
次の金曜日ではなく、次の週の金曜日が必要だと言う場合、金曜日と土曜日は同じですが、他の日は(7 +(6-今日の平日))です。
WHERE
DATE(date_row) BETWEEN CURDATE() AND
DATE_ADD(CURDATE(), INTERVAL (
/* It's Friday, add 7 */
IF(DAYOFWEEK(CURDATE())=6, 7,
/* It's Saturday, add 6 */
IF(DAYOFWEEK(CURDATE())=7, 6,
/* All other days, add 6 - weekday + 7*/
(7 + (6 -DAYOFWEEK(CURDATE()))))))
DAY )
そして、IF()
金曜日は6 + 7 +(6-6)= 7であり、土曜日は7 + 7 + 6-7 = 6であるため、ロジックなしで単純化することができます。
WHERE
DATE(date_row) BETWEEN CURDATE() AND
DATE_ADD(CURDATE(), INTERVAL (7 + (6 - DAYOFWEEK(CURDATE()))) DAY)
最終更新:
今日が金曜日の場合、今日戻りたくない場合は、で使用することはできませCURDATE()
んBETWEEN
。OR
金曜日の場合に実行する条件を追加します。
WHERE
/* If today is Friday, exclude today, and start counting tomorrow */
(DAYOFWEEK(CURDATE()) = 6
AND DATE(date_row) BETWEEN DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)
)
OR (
DATE(date_row) BETWEEN CURDATE() AND
DATE_ADD(CURDATE(), INTERVAL (
/* It's Saturday, add 6 */
IF(DAYOFWEEK(CURDATE())=7, 6,
/* All other days, add 6 - weekday + 7*/
(7 + (6 -DAYOFWEEK(CURDATE())))))
DAY )
)