足し算したかったので文字列の数字を数値に変換して使う機会があったのですが、数値にしてしまうとせっかくつけていた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’)
作成したテーブル。
itemid | tittle | episode |
---|---|---|
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
結果
tittle | to_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埋めにすることはよくありそうなのでこれから使う機会がありそうです。