PostgreSQLで日時をフォーマットして取得する方法

こんにちは、さるまりんです。

DBのTimestamp型のカラムのデータを書式を指定して取得するとき、

1. 一度DBからそのまま取得して、(JavaやPHP等で書かれた)プログラム側でフォーマット

2. DBで利用できる関数でフォーマット

のどちらかになると思います。

今回は後者の2です。

PostgreSQLのto_char()関数を利用してTimestampを書式を指定して文字列として取得します。

Timestampをyyyy/mm/dd hh:mm:ssの書式で取得

to_char()の使い方は以下の通りです。

to_char([Timestamp型のデータ], '書式の文字列')

例えば

to_char(current_timestamp, 'YYYY/MM/DD HH24:MI:SS')

で、現在日時をyyyy/mm/dd hh:mm:ssの文字列として取得できます。

このto_char()で日時に使える書式文字列として次のようなものがあります。

パターン 書式
HH12 時 (01〜12)
HH24 時 (00〜23)
MI 分 (00〜59)
SS 秒 (00〜59)
MS ミリ秒 (000〜999)
AM, am, PM, pm 午前 or 午後
YYYY 年 (4桁以上)
MM 月 (01〜12)
DD 日 (01〜31)

他にも'Month''Day'で月名や曜日の文字列を取得したりすることもできます。

が、よく使うのは

'YYYY/MM/DD HH24:MI:SS''YYYY-MM-DD HH24:MI:SS''YYYYMMDDHH24MISS'

でしょうか。

プログラムを書いている時、データ型を合わせていないと動かないことがあったりします。

このケースでは文字列に直していないといけない場合です。

逆に文字列ではなくTimestamp型が必要な時にはto_timestamp()。数値が必要な場合はto_number()と利用できる関数があります。それらについては改めてまとめたいと思います。

違う型を一緒に扱う時はキャストだけで済んだら楽なんですが、厳密に変換した方が動作が安心ということもありますね。

読んでくださってありがとうございました。

それではまた!