- PR -

default句でのゼロパディングの方法(Postgres)

1
投稿者投稿内容
FZR
常連さん
会議室デビュー日: 2007/09/10
投稿数: 42
投稿日時: 2007-11-12 10:38
現在、PostgreSQL 8.2.5を使用しています。

あるキャラクタ列の初期値としてシーケンスから取得した値をゼロパディングして設定するようにしています。以下のように、create文のdefault句を指定することで、特に問題なく利用はできているのですが、そもそも以下のようにnextval以外に関数を2つも使用しないと実現できないものなのか疑問に感じています。

dmy character varying(3) default btrim(to_char(nextval('s_dmy'::regclass), '000'::text)),

上記のdefaultの部分を

default to_char(nextval('s_dmy'::regclass), '00000'::text),

だけにすると、左端に余分な(signed分?)な空白が付加されるのでtrimしているわけですが、関数次第ではもっとシンプルになるのではないか?と思ったりもしているのですが、他に方法はないものなのでしょうか?
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2007-11-14 13:04
PostgreSQLのマニュアルで、to_char関数の例として、書式に'FM'を付ける例が記載
されています。

コード:
create table tbl1
(c1    varchar(5) default to_char(nextval('s_dmy'),'FM000'),
 c2    int,
 c3    varchar(10));



上記の表定義では、varchar(5)で定義していますが、下記SQLで結果を得ると、
3バイトで格納されています。

コード:
insert into tbl1(c2,c3) values(1,'a');
insert into tbl1(c2,c3) values(2,'a');
insert into tbl1(c2,c3) values(3,'a');
insert into tbl1(c2,c3) values(4,'a');
insert into tbl1(c2,c3) values(5,'a');
insert into tbl1(c2,c3) values(6,'a');
insert into tbl1(c2,c3) values(7,'a');
insert into tbl1(c2,c3) values(8,'a');
insert into tbl1(c2,c3) values(9,'a');
insert into tbl1(c2,c3) values(10,'a');

select length(c1),c1,c2,c3 from tbl1;



FZR
常連さん
会議室デビュー日: 2007/09/10
投稿数: 42
投稿日時: 2007-11-21 16:47
# 忠犬さま

回答いただいていたのに返事が遅れまして申し訳ありません。
FM接頭辞について、今マニュアルでも確認いたしました。
なるほど、これで気分的にスッキリします。
他の修飾子は使う機会があるかどうか判りませんが、FM接頭辞だけは色々とお世話になる気がします。

どうもありがとうございました。m(_ _)m
1

スキルアップ/キャリアアップ(JOB@IT)