PostgreSQLでは、DATE
型や TIMESTAMP
型などの日付データを扱うことができますが、画面表示や帳票出力の際には、「YYYY/MM/DD」や「2025年4月7日」といった形に整形したい場面が多くあります。
そんな時に便利なのが、TO_CHAR
関数です。この関数を使えば、日付型のデータを任意のフォーマットで文字列に変換することができます。
本記事では、TO_CHAR
関数の基本的な使い方から、実務でよく使うフォーマット例、そして応用的なテクニックまでをわかりやすく解説していきます。PostgreSQLで日付のフォーマットを自由にカスタマイズしたい方は、ぜひ参考にしてみてください。
TO_CHAR関数の書き方
PostgreSQLで日付型を任意の形式に変換したい場合は、TO_CHAR
関数を使います。基本的な構文は以下の通りです。
TO_CHAR(対象の日付, 'フォーマット文字列')
例えば、現在の日付を「YYYY/MM/DD」の形式で表示したい場合は、次のように記述します。
SELECT TO_CHAR(current_date, 'YYYY/MM/DD');
実行結果
2025/04/07
このように、日付型を文字列としてフォーマットすることができます。
フォーマット文字列に指定できる要素は多岐に渡り、例えば「年(YYYY)」「月(MM)」「日(DD)」のような基本的なものから、「曜日」や「時間」なども指定可能です。
よく使われるフォーマット例一覧
TO_CHAR
関数で使用できるフォーマット文字列にはさまざまな種類があります。ここでは、日付や時刻の表示でよく使われるものを一覧で紹介します。
フォーマット | 意味 | 例(2025年4月7日 14時30分45秒の場合) |
---|---|---|
YYYY | 西暦4桁 | 2025 |
YY | 西暦下2桁 | 25 |
MM | 月(2桁) | 04 |
DD | 日(2桁) | 07 |
HH24 | 時(24時間制) | 14 |
MI | 分 | 30 |
SS | 秒 | 45 |
Day | 曜日名(英語、右側にスペースあり) | Monday |
Dy | 曜日略称(英語、右側にスペースあり) | Mon |
D | 曜日を数値で(1=日曜) | 2(例:月曜日) |
これらのフォーマットを組み合わせることで、さまざまな表示スタイルを実現できます。
注意点と補足
TO_CHAR
関数は非常に便利ですが、使う際に気をつけたいポイントがいくつかあります。
ロケールによる曜日・月名の表示
Day
や Dy
、Month
などのフォーマットを使うと、曜日名や月名が表示されますが、これらはデフォルトで英語表記になります。
SELECT TO_CHAR(current_date, 'Day, Month');
実行結果の例
Monday , April
日本語で表示したい場合は、アプリケーション側で変換処理を行うか、SET lc_time
などでロケールを変更する必要があります。ただし、ロケール変更はDB全体に影響するため、慎重に扱いましょう。
日付型と時刻型の違いに注意
DATE
型は日付のみ(年・月・日)TIMESTAMP
型は日付+時間(年・月・日・時・分・秒)
例えば、current_timestamp
は TIMESTAMP
型なので、時間部分も含まれます。
SELECT TO_CHAR(current_timestamp, 'YYYY-MM-DD HH24:MI:SS');
これに対して、current_date
は DATE
型のため、時間のフォーマットをしても反映されません。
まとめ
PostgreSQLで日付型を任意の形式に変換したいときは、TO_CHAR
関数を使えば柔軟に対応できます。
フォーマット文字列を工夫することで、「YYYY/MM/DD」や「2025年4月7日(月)」といった見やすい形に整えることができ、実務でのレポート出力や画面表示にも役立ちます。
また、曜日や月名の扱い、ゼロ埋めの有無など、細かな調整も可能です。
一方で、ロケール設定やフォーマットミスによるエラーには注意が必要なので、必要に応じて事前に確認しておくと安心です。
ぜひこの記事を参考に、PostgreSQLでの日付フォーマットを自分の用途に合わせて活用してみてください!
コメント