PostgreSQLでSELECT文でゼロパディングさせる!

2020-10-25

足し算したかったので文字列の数字を数値に変換して使う機会があったのですが、数値にしてしまうとせっかくつけていた0が消えてしまった( 001 → 1)。再び0をつけるにはどうしたらいいのだろうと思い調べてみました。

PostgreSQLでゼロパディング

動作環境

環境を作るのが面倒だったのでSQLiteonlineを使ってPostgreSQL9.6の動作確認を行いました。

準備

以下のテーブルを用意します。

-- CREATE文
CREATE TABLE item (
ItemID numeric(8, 0) unique not null,
Tittle character varying (20) ,
episode character varying (20),
primary key(ItemID)
);
-- INSERT文
insert into item
values(0001, '家政婦は見た!', '000001'),
(0002, '金田一少年の事件簿', '022'),
(0003, null, '3')

作成したテーブル。

itemidtittleepisode
1家政婦は見た!000001
2金田一少年の事件簿022
3(null)3

episodeの数字を0埋めにしたいと思います。

サンプルコード

ようやく本題です。4桁で揃えたいと思います。「000001」は「0001」にして余分な0を取り除き、「3」は「0003」にゼロパディングさせるサンプルコードです。

Select
Tittle
,to_char(cast(episode as integer), '0000')
from item

結果

tittleto_char
家政婦は見た!0001
金田一少年の事件簿0022
(null)0003

簡単な解説

cast(episode as integer)で一度episodeカラムを数値に変換しています。

castの構文

cast(カラム名または値 as 型)

次にto_char()を使って数値を文字列に戻しています。

to_charの構文

to_char( カラム名または数値 , 書式 )

書式にゼロを使うと前にゼロが付いた値を設定することができます。

2つの構文をくっつけてサンプルコードのSQLを作成しました。

to_char(cast(episode as integer), '0000')

おわり

to_char()の中にcast()とかすると複雑になってわけがわからなくなってきますね。
桁数揃えて0埋めにすることはよくありそうなのでこれから使う機会がありそうです。

PostgreSQL, SQL

Posted by Nakamoto