【保存版】PostgreSQLで今週の月曜日を取得する方法6選!初心者でも安心
PostgreSQLで今週の月曜日を取得する方法
方法1: current_date と extract 関数を使用する
この方法は、current_date
関数を使用して現在の日付を取得し、extract
関数を使用して曜日を抽出します。曜日は 1 から 7 の数値で表され、1 が日曜日です。
-- 現在の日付を取得
SELECT current_date;
-- 現在の曜日の数値を取得
SELECT extract(dow FROM current_date);
上記の結果を組み合わせることで、今週の月曜日を取得できます。
-- 現在の日付から曜日を引いて、0 になるように調整
SELECT current_date - interval 'day' * (extract(dow FROM current_date) - 1);
この方法は、date_trunc
関数を使用して、現在の日付を週の始まりに切り捨てます。
-- 現在の日付を週の始まりに切り捨て
SELECT date_trunc('week', current_date);
current_date
とextract
関数を使用する方法は、より柔軟性があり、曜日だけでなく、曜日からのオフセットも計算できます。date_trunc
関数を使用する方法は、より簡潔で、読みやすいコードになります。
補足
- 上記のコードは、PostgreSQL 8.0 以降で使用できます。
例
-- 2024年6月22日現在、今週の月曜日を取得
SELECT date_trunc('week', current_date);
-- 結果: 2024-06-17
この例では、date_trunc
関数を使用して、2024年6月22日現在の週の始まりを計算しています。結果は、2024年6月17日となります。
PostgreSQL で今週の月曜日を取得するには、いくつかの方法があります。上記の方法を参考に、状況に合わせて適切な方法を選択してください。
PostgreSQLで今週の月曜日を取得するサンプルコード
-- 現在の日付
SELECT current_date AS current_day;
-- 現在の曜日 (1: 日曜日, 7: 土曜日)
SELECT extract(dow FROM current_day) AS current_day_dow;
-- 曜日番号から今週の月曜日を計算
SELECT current_day - interval 'day' * (current_day_dow - 1) AS this_week_monday;
方法2: date_trunc 関数を使用する
-- 現在の日付を週の始まりに切り捨て
SELECT date_trunc('week', current_date) AS this_week_monday;
説明
- 上記のコードは、いずれも2024年6月22日現在で実行した場合、2024年6月17日という結果を出力します。
補足
- サンプルコードでは、変数名にわかりやすい名前を付けていますが、適宜変更してください。
- 実際のコードでは、必要に応じてエラー処理やコメントを追加することをお勧めします。
PostgreSQLで今週の月曜日を取得するその他の方法
方法3: PostgreSQLの組み込み関数 floor と date_part を使用する
この方法は、組み込み関数 floor
と date_part
を使用して、現在の日付を週の始めに切り捨てます。
-- 現在の日付を週の始めに切り捨て
SELECT floor(date_part('day', current_date) / 7) * 7 AS this_week_monday;
方法4: SQL式を組み合わせて使用する
この方法は、SQL式を組み合わせて、現在の日付から曜日を引いて、0 になるように調整します。
-- 現在の日付から曜日を引いて、0 になるように調整
SELECT current_date - interval 'day' * (EXTRACT(DOW FROM current_date) - 1) AS this_week_monday;
方法5: CASE式を使用する
この方法は、CASE式を使用して、曜日ごとに異なる処理を実行します。
SELECT
CASE
WHEN EXTRACT(DOW FROM current_date) = 1 THEN current_date - interval 'day' * 6
WHEN EXTRACT(DOW FROM current_date) = 2 THEN current_date - interval 'day' * 5
...
ELSE current_date - interval 'day'
END AS this_week_monday;
- 方法1と方法2はシンプルでわかりやすいですが、曜日番号の扱いに注意が必要です。
- 方法3は、曜日番号を意識することなく、週の始まりを計算できます。
- 方法4は、曜日ごとに異なる処理を実行したい場合に便利です。
- 方法5は、CASE式を使用して柔軟な処理を行うことができます。
postgresql