1

親愛なる
皆さん、postgres で 0000000001 から 00nnnnnnnnn のようなシーケンスを作成したいのですが、通常は 1 から n まで作成できますが、その前に 0 を付けたいの
ですが、これを行う簡単な方法はありますか ???

4

2 に答える 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

INTEGERPostgreSQL シーケンスはまたは値のみを返すことができるBIGINTため、通常は数値10000001は同じと見なされ、1標準的な表現になります。

なぜこれをしたいのかわかりませんが、シーケンス番号を文字列に変換し、次の0ように適切な数の文字を先頭に追加できます。

SELECT repeat('0', 7 - length(nextval('myseq'))) || currval('myseq')::text

7 は必要な桁数の合計です (数字がその桁数を超えると、コードが機能しなくなる可能性があります)。

数値のソースとしてシーケンス myseq を作成する必要があることに注意してください。

CREATE SEQUENCE myseq;
于 2013-06-11T09:38:02.773 に答える