直前の指定の曜日 (postgresql)

メモ。

現在日時から直前の日曜日を Postgres で出す。全然覚えられないのでメモ。

次の日曜日
TO_DATE(CONCAT(EXTRACT(YEAR FROM CURRENT_TIMESTAMP), '_', EXTRACT(WEEK FROM CURRENT_TIMESTAMP), '_7'), 'IYYY_IW_ID')

直前の日曜日
TO_DATE(CONCAT(EXTRACT(YEAR FROM CURRENT_TIMESTAMP + '-6 days'), '_', EXTRACT(WEEK FROM CURRENT_TIMESTAMP + '-6 days'), '_7'), 'IYYY_IW_ID')

2つ前の日曜日
TO_DATE(CONCAT(EXTRACT(YEAR FROM CURRENT_TIMESTAMP + '-13 days'), '_', EXTRACT(WEEK FROM CURRENT_TIMESTAMP + '-13 days'), '_7'), 'IYYY_IW_ID')

TO_DATE(‘西暦_週番号_曜日番号’, , ‘IYYY_IW_ID’))
曜日番号は、1 から 7 で月曜から日曜を指定する。

例: SELECT TO_DATE('2024-01-1', 'IYYY-IW-ID');
結果:2024-01-01
例: SELECT TO_DATE('2024-01-7', 'IYYY-IW-ID');
結果:2024-01-07

0 も指定できるが、月曜の前の日曜を指すわけではない点に注意。紛らわしいので 0 は使いたくない。

例: SELECT TO_DATE('2024-01-0', 'IYYY-IW-ID');
結果:2024-01-07

TO_DATE() について、詳細はここ
https://www.postgresql.jp/document/9.2/html/functions-formatting.html