親愛なる
皆さん、postgres で 0000000001 から 00nnnnnnnnn のようなシーケンスを作成したいのですが、通常は 1 から n まで作成できますが、その前に 0 を付けたいの
ですが、これを行う簡単な方法はありますか ???
2706 次
2 に答える
6
シーケンスは数値ジェネレーターであり、数値には「0」の左パディングがありません...
パディングを追加する場合は、lpad 関数を使用できます。
CREATE SEQUENCE my_sequence_seq;
SELECT lpad(nextval('my_sequence_seq')::text,10,'0');
テーブル宣言でも使用できます。
CREATE TABLE sequence_test(
id varchar(20) NOT NULL DEFAULT lpad(nextval('my_sequence_seq')::text,10,'0'),
name text
);
于 2013-06-11T09:40:31.297 に答える
2
INTEGER
PostgreSQL シーケンスはまたは値のみを返すことができるBIGINT
ため、通常は数値1
と0000001
は同じと見なされ、1
標準的な表現になります。
なぜこれをしたいのかわかりませんが、シーケンス番号を文字列に変換し、次の0
ように適切な数の文字を先頭に追加できます。
SELECT repeat('0', 7 - length(nextval('myseq'))) || currval('myseq')::text
7 は必要な桁数の合計です (数字がその桁数を超えると、コードが機能しなくなる可能性があります)。
数値のソースとしてシーケンス myseq を作成する必要があることに注意してください。
CREATE SEQUENCE myseq;
于 2013-06-11T09:38:02.773 に答える