経緯
来週、パッチチューズデイ(第2火曜日)があります。この「第2火曜日」をSQLでどう判定するのだろうとふと思い検証してみました。SQLを試し打ちするための簡易的な環境を構築する方法もあわせて記録として残しておきます。
環境
- Windows 11 Pro (未検証ですがWindows 10でも大丈夫だと思います)
- Rancher Desktop (未検証ですがDocker Desktopでも大丈夫だと思います)
手順
一時的に利用するMySQL環境を構築します。パスワードやポートは適宜書き換えて下さい。
docker run -d --name mysql1 -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 mysql
winget install HeidiSQL.HeidiSQL
色々試してみて、以下のように判定すればいいと考えました。条件に合致する場合は1が、そうでない場合は0が返ってきます。
-- M → 月
-- N → 第N週
-- D → 曜日番号(日曜日が1で、土曜日が7)
-- T → 判定対象の日付
SET
@M=4
,@N=2
,@D=3
,@T=STR_TO_DATE('2022/04/12', '%Y/%m/%d')
;
SELECT
-- M月
MONTH(@T) = @M
-- N週
AND DAY(@T) BETWEEN (@N - 1) * 7 + 1 AND (@N - 1) * 7 + 7
-- D曜日
AND DAYOFWEEK(@T) = @D
AS RESULT
;
一時的な環境なので、検証後はお片付けします。
docker container rm -f mysql1
winget uninstall HeidiSQL.HeidiSQL
以上です。