🧚 お知らせ!Beekeeper Studioは高速でモダンなオープンソースのデータベースGUIです ダウンロード
2024年1月12日 著者: Matthew Rathbone

SQLデータベースの世界において、PostgreSQLはその堅牢性と豊富な機能で広く知られています。その機能の1つが、日付型やタイムスタンプ型の強力なサポートです。このガイドでは、PostgreSQLで日付をフォーマットする方法をコードサンプルとともに解説します。このチュートリアルは、PostgreSQLの知識を広げたいソフトウェアエンジニアや技術に詳しい方を対象としています。

PostgreSQLの日付を理解する

日付のフォーマット方法に入る前に、PostgreSQLで日付がどのように表現されるかを理解しておくことが重要です。PostgreSQLでは日付の保存に「Date」データ型を使用します。DATE列を持つテーブルは次のように作成します。

CREATE TABLE orders (
  order_id serial PRIMARY KEY,
  order_date DATE NOT NULL
);

では、ordersテーブルにデータを挿入してみましょう。

INSERT INTO orders (order_date) VALUES 
('2022-04-01'),
('2022-04-02'),
('2022-04-03');

PostgreSQLは賢いので、ISO 6801形式で日付を指定すれば、文字列から日付を判別してくれます。

PostgreSQLで日付をフォーマットする方法: TO_CHAR関数の使用

PostgreSQLで日付をフォーマットする主な方法は、TO_CHAR関数を使うことです。TO_CHARを使うと、日付/時刻型を特定のパターンの文字列にフォーマットできます。使い方は次のとおりです:

TO_CHAR(date, format)

フォーマット文字列オプションの完全な一覧はPostgreSQLのドキュメントで確認できます。2024年1月時点のフォーマットオプションは以下のとおりです:

パターン 説明
HH 時(01–12)
HH12 時(01–12)
HH24 時(00–23)
MI 分(00–59)
SS 秒(00–59)
MS ミリ秒(000–999)
US マイクロ秒(000000–999999)
FF1 10分の1秒(0–9)
FF2 100分の1秒(00–99)
FF3 ミリ秒(000–999)
FF4 10分の1ミリ秒(0000–9999)
FF5 100分の1ミリ秒(00000–99999)
FF6 マイクロ秒(000000–999999)
SSSS, SSSSS 午前0時からの経過秒数(0–86399)
AM, am, PM or pm 午前/午後の表示(ピリオドなし)
A.M., a.m., P.M. or p.m. 午前/午後の表示(ピリオドあり)
Y,YYY カンマ付きの年(4桁以上)
YYYY 年(4桁以上)
YYY 年の下3桁
YY 年の下2桁
Y 年の下1桁
IYYY ISO 8601週番号年(4桁以上)
IYY ISO 8601週番号年の下3桁
IY ISO 8601週番号年の下2桁
I ISO 8601週番号年の下1桁
BC, bc, AD or ad 紀元の表示(ピリオドなし)
B.C., b.c., A.D. or a.d. 紀元の表示(ピリオドあり)
MONTH 大文字の月名(9文字まで空白埋め)
Month 先頭大文字の月名(9文字まで空白埋め)
month 小文字の月名(9文字まで空白埋め)
MON 大文字の月名の省略形(英語では3文字、ロケールにより長さは異なります)
Mon 先頭大文字の月名の省略形(英語では3文字、ロケールにより長さは異なります)
mon 小文字の月名の省略形(英語では3文字、ロケールにより長さは異なります)
MM 月の番号(01–12)
DAY 大文字の曜日名(9文字まで空白埋め)
Day 先頭大文字の曜日名(9文字まで空白埋め)
day 小文字の曜日名(9文字まで空白埋め)
DY 大文字の曜日名の省略形(英語では3文字、ロケールにより長さは異なります)
Dy 先頭大文字の曜日名の省略形(英語では3文字、ロケールにより長さは異なります)
dy 小文字の曜日名の省略形(英語では3文字、ロケールにより長さは異なります)
DDD 年間通算日(001–366)
IDDD ISO 8601週番号年の通算日(001–371。年の1日目は最初のISO週の月曜日)
DD 日(01–31)
D 曜日。日曜日(1)から土曜日(7)
ID ISO 8601の曜日。月曜日(1)から日曜日(7)
W 月の週番号(1–5)(第1週は月の初日から始まります)
WW 年の週番号(1–53)(第1週は年の初日から始まります)
IW ISO 8601週番号年の週番号(01–53。年の最初の木曜日が第1週に含まれます)
CC 世紀(2桁)(21世紀は2001-01-01から始まります)
J ユリウス日(紀元前4714年11月24日の現地時間午前0時からの整数日数。セクションB.7を参照)
Q 四半期
RM 大文字のローマ数字による月(I–XII。I=1月)
rm 小文字のローマ数字による月(i–xii。i=1月)
TZ 大文字のタイムゾーン略称(to_charでのみサポート)
tz 小文字のタイムゾーン略称(to_charでのみサポート)
TZH タイムゾーンの時間
TZM タイムゾーンの分
OF UTCからのタイムゾーンオフセット(to_charでのみサポート)

日付フォーマットの例

まずは日付をシンプルで読みやすい文字列に変換してみましょう。方法は次のとおりです:

SELECT order_id, TO_CHAR(order_date, 'DD Mon YYYY') as formatted_date
FROM orders;

出力は次のようになります:

order_id | formatted_date
———+—————-
1 | 13 Jan 2024
2 | 12 Jan 2024
3 | 11 Jan 2024
4 | 10 Jan 2024
5 | 09 Jan 2024

日付の一部だけを抽出することもできます:

SELECT order_id, TO_CHAR(order_date, 'Day') as day_of_week
FROM orders;

order_id | day_of_week
———+————-
1 | Friday
2 | Thursday
3 | Wednesday
4 | Tuesday
5 | Monday

必要に応じてフォーマットを組み合わせることもできます:

SELECT order_id, TO_CHAR(order_date, 'Day, DD Mon YYYY') as detailed_date
FROM orders;

order_id | detailed_date
———+————————
1 | Friday, 13 Jan 2024
2 | Thursday, 12 Jan 2024
3 | Wednesday, 11 Jan 2024
4 | Tuesday, 10 Jan 2024
5 | Monday, 09 Jan 2024

EXTRACT関数

EXTRACT関数を使うと、年、月、日など、日付/時刻値のあらゆる部分に簡単にアクセスできます。

SELECT order_id, EXTRACT(MONTH from order_date) as order_month
FROM orders;

order_id | order_month
———+————
1 | 1
2 | 1
3 | 1
4 | 1
5 | 1

以上がPostgreSQLにおける日付フォーマットの基本です。これらのツールは、日付データを扱うための確かな基礎となるはずです。プログラミングの何事も同じですが、練習が鍵です。ぜひ実際にこれらのコマンドを試して、他にどんなことができるか探ってみてください。Happy coding!

これらのクエリはぜひBeekeeper Studioで実行してみてください。:-)

Beekeeper Studioは無料のオープンソースのデータベースGUIです

これまで使った中で最高のSQLクエリ&エディタツールです。データベースの管理に必要なものがすべて揃っています。 - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studioは高速で直感的、そして使いやすいツールです。多数のデータベースに対応し、Windows、Mac、Linuxで快適に動作します。

BeekeeperのLinux版は100%フル機能。手抜きも機能の妥協も一切ありません。

Beekeeper Studio利用者の声

★★★★★
「Beekeeper Studioで以前のSQLワークフローを完全に置き換えました。高速で直感的で、データベース作業が再び楽しくなりました。」
— Alex K.、データベース開発者
★★★★★
「多くのデータベースGUIを試してきましたが、Beekeeperは機能とシンプルさのバランスが完璧です。とにかくちゃんと動きます。」
— Sarah M.、フルスタックエンジニア