ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PostgreSQL:SQLで月日のゼロ埋めを消す方法

既存のシステムを改造していて、月日の表示が04月03日になっていることに気がつきました。
ソースコードを確認すると、SQLで取得できた値をそのまま表示していました。

SQLを確認すると、

SELECT to_char(date1, 'MM月DD日') AS char_date1 FROM test_table

となっていました。

テンプレートパターンには用意されていない

データベースはPostgreSQLを使っているので、to_char()関数のマニュアルを確認したところ、日付/時刻型の書式テンプレートパターンには、ゼロ埋めをしないパターンが存在しません。

修飾子が用意されている

to_char()関数のマニュアルを読んでいくと、日付/時刻書式用のテンプレートパターン修飾子のFM修飾子の説明として、

FMはパターンの出力を固定長にするため、先頭にはゼロ、末尾には空白を追加してしまう機能を無効にします。

とありました。

以下のように適用すると、4月3日と表示されるようになりました。

SELECT to_char(date1, 'FMMM月FMDD日') AS char_date1 FROM test_table


最初からゼロ埋めしないテンプレートパターンが用意されていてもおかしくない気がしますが、PostgreSQL固有になってしまうから存在しないのでしょうか。
日付/時刻周りは、データベースによって扱いが異なっていた印象があるので、他のデータベースを利用するときに気にしてみます。