- 投稿日:2022年02月16日 21時51分07秒
- 更新日:2022年03月03日 09時32分10秒

ある日を起点に直近〇曜日の日付を取得する
実行日から直近の木曜日と次の水曜日を取得する
SELECT thuwk_beg + INTERVAL 0 second thu_beg,
thuwk_beg + INTERVAL 604799 second wed_end
FROM (SELECT (DATE(NOW()) - INTERVAL daysbacktothursday DAY) thuwk_beg
FROM (SELECT SUBSTR('3456012',wkndx,1) daysbacktothursday
FROM (SELECT DAYOFWEEK(dt) wkndx FROM (SELECT DATE(NOW()) dt) AAAA) AAA) AA) A;
説明
皆さんご存じの現在日時を取得するSQL
SELECT DATE(NOW()) dt;
そこから曜日番号を取得
SELECT DAYOFWEEK(dt) wkndx FROM (SELECT DATE(NOW()) dt) AAAA;
現在日から何日引けば木曜日になるのかを取得
SELECT SUBSTR('3456012',wkndx,1) daysbacktothursday
FROM (SELECT DAYOFWEEK(dt) wkndx FROM (SELECT DATE(NOW()) dt) AAAA) AAA;
直近の木曜日を取得
SELECT (DATE(NOW()) - INTERVAL daysbacktothursday DAY) thuwk_beg
FROM (SELECT SUBSTR('3456012',wkndx,1) daysbacktothursday
FROM (SELECT DAYOFWEEK(dt) wkndx FROM (SELECT DATE(NOW()) dt) AAAA) AAA) AA;
INTERVAL関数を使い一週間(60 * 60 * 24 * 7 秒)を加算した日を水曜とする
SELECT thuwk_beg + INTERVAL 0 second thu_beg,
thuwk_beg + INTERVAL 604799 second wed_end
FROM (SELECT (DATE(NOW()) - INTERVAL daysbacktothursday DAY) thuwk_beg
FROM (SELECT SUBSTR('3456012',wkndx,1) daysbacktothursday
FROM (SELECT DAYOFWEEK(dt) wkndx FROM (SELECT DATE(NOW()) dt) AAAA) AAA) AA) A;
使い方
NOW()を好きな日にちに入れ替えると起点とする日にちを変えることが出来ます。
またSELECT SUBSTR(‘3456012’,wkndx,1)の’3456012’の並びを変えると開始とする曜日を変えることが出来ます。例えば月曜から日曜だと’6012345’です。
※ここは「今日から何日引くと〇曜日になる」を判定している場所のため、dayofweekで判定し数列の中に’0’が含まれています。
weekdayで判断したい場合は-1しなくてはいけないパターンが出現するのに注意してください。