【永久保存版】PostgreSQLで曜日を抽出する方法 3選!今週の始まりは月曜日!?
PostgreSQLで日付フィールドから曜日を抽出する方法(週の始まりは月曜日)
extract()
関数は、日付/時刻値から年、月、日、曜日などの情報を取り出すことができます。曜日を取得するには、dow
という引数を使用します。この引数は、0を日曜、1を月曜、6を土曜日として値を返します。
SELECT
date_field,
EXTRACT(DOW FROM date_field) AS day_of_week
FROM your_table;
このクエリは、your_table
テーブルの date_field
列にある日付の曜日をすべて抽出します。結果は次のようになります。
date_field | day_of_week
-------+-------------
2024-06-10 | 1 # 月曜日
2024-06-11 | 2 # 火曜日
2024-06-12 | 3 # 水曜日
2024-06-13 | 4 # 木曜日
2024-06-14 | 5 # 金曜日
2024-06-15 | 6 # 土曜日
2024-06-16 | 0 # 日曜日
しかし、この方法では、曜日の表示形式が数値になっており、そのままでは分かりにくいという問題があります。そこで、次に紹介する方法では、曜日名を日本語で表示することにします。
to_char()
関数は、日付/時刻値を様々な形式で文字列に変換することができます。曜日名を日本語で表示するには、'DY'
という形式 specifier を使用します。
SELECT
date_field,
to_char(date_field, 'DY') AS day_of_week_name
FROM your_table;
date_field | day_of_week_name
-------+-----------------
2024-06-10 | 月曜日
2024-06-11 | 火曜日
2024-06-12 | 水曜日
2024-06-13 | 木曜日
2024-06-14 | 金曜日
2024-06-15 | 土曜日
2024-06-16 | 日曜日
週の始まりを月曜日にする
PostgreSQLのデフォルトでは、曜日の番号は0を日曜日、1を月曜日としていますが、日本では一般的に月曜日を週の始めとしています。そこで、以下の方法で、extract()
関数で取得した曜日番号を月曜日始まりに変換することができます。
SELECT
date_field,
(EXTRACT(DOW FROM date_field) + 1) AS day_of_week,
to_char(date_field, 'DY') AS day_of_week_name
FROM your_table;
date_field | day_of_week | day_of_week_name
-------+-------------+-----------------
2024-06-10 | 1 | 月曜日
2024-06-11 | 2 | 火曜日
2024-06-12 | 3 | 水曜日
2024-06-13 | 4 | 木曜日
2024-06-14 | 5 | 金曜日
2024-06-15 | 6 | 土曜日
2024-06-16 | 7 | 日曜日
上記の方法を組み合わせることで、PostgreSQLで日付フィールドから曜日を抽出し、月曜日始まりで日本語で表示することができます。
これらの方法は、様々な状況で役立ちます。例えば、カレンダーアプリや顧客管理システムなどの開発において、日付に基づいてデータを分類したり、表示したりする際に有用です
PostgreSQLで日付フィールドから曜日を抽出するサンプルコード(週の始まりは月曜日)
-- サンプルデータを作成
CREATE TABLE your_table (
id serial PRIMARY KEY,
date_field date NOT NULL
);
INSERT INTO your_table (date_field) VALUES
('2024-06-10'),
('2024-06-11'),
('2024-06-12'),
('2024-06-13'),
('2024-06-14'),
('2024-06-15'),
('2024-06-16');
-- 曜日番号と曜日名を抽出
SELECT
date_field,
(EXTRACT(DOW FROM date_field) + 1) AS day_of_week,
to_char(date_field, 'DY') AS day_of_week_name
FROM your_table;
このコードは以下の処理を実行します。
your_table
という名前のテーブルを作成し、id
列とdate_field
列を定義します。- サンプルデータを
your_table
テーブルに挿入します。 date_field
列にある日付の曜日番号と曜日名を抽出します。
このクエリを実行すると、以下の結果が出力されます。
date_field | day_of_week | day_of_week_name
-------+-------------+-----------------
2024-06-10 | 1 | 月曜日
2024-06-11 | 2 | 火曜日
2024-06-12 | 3 | 水曜日
2024-06-13 | 4 | 木曜日
2024-06-14 | 5 | 金曜日
2024-06-15 | 6 | 土曜日
2024-06-16 | 7 | 日曜日
このコードを参考に、自分のニーズに合わせてカスタマイズすることができます。例えば、抽出する列や表示形式を変更したり、条件式を追加したりすることができます。
PostgreSQLで日付フィールドから曜日を抽出するその他の方法
CASE
式は、条件に応じて異なる値を返すことができる式です。曜日を抽出するには、以下のクエリのように使用することができます。
SELECT
date_field,
CASE
WHEN EXTRACT(DOW FROM date_field) = 0 THEN '日曜日'
WHEN EXTRACT(DOW FROM date_field) = 1 THEN '月曜日'
WHEN EXTRACT(DOW FROM date_field) = 2 THEN '火曜日'
WHEN EXTRACT(DOW FROM date_field) = 3 THEN '水曜日'
WHEN EXTRACT(DOW FROM date_field) = 4 THEN '木曜日'
WHEN EXTRACT(DOW FROM date_field) = 5 THEN '金曜日'
ELSE '土曜日'
END AS day_of_week_name
FROM your_table;
date_part()
関数は、日付/時刻値から年、月、日、曜日などの情報を取り出すことができます。extract()
関数と同様に、曜日を取得するには、dow
という引数を使用します。ただし、date_part()
関数は、曜日名を直接文字列として返すことができます。
SELECT
date_field,
date_part('day', date_field) AS day_of_week_name
FROM your_table;
外部ライブラリを使う
PostgreSQLには、日付処理を拡張する様々な外部ライブラリが用意されています。例えば、pg_calendar
ライブラリを使用すると、より柔軟な曜日処理を行うことができます。
-- pg_calendar ライブラリをインストール
CREATE EXTENSION pg_calendar;
SELECT
date_field,
calendar.day_name(date_field, 'ja') AS day_of_week_name
FROM your_table;
これらの方法はそれぞれ異なる利点と欠点があります。状況に合わせて最適な方法を選択してください。
sql postgresql date