我刚接触Postgres,正在尝试创建模式。 我的需求是需要自动递增表中的ID列,但我不想只是一个数字,我希望它是一个固定值后跟着递增的数字。 例如 -
DAG100H001
DAG100H002
DAG100H003
DAG100H004
有点像这样。我在查看文档时发现了“serial”但是不确定如何使用它实现。 任何帮助将不胜感激。谢谢。
我刚接触Postgres,正在尝试创建模式。 我的需求是需要自动递增表中的ID列,但我不想只是一个数字,我希望它是一个固定值后跟着递增的数字。 例如 -
DAG100H001
DAG100H002
DAG100H003
DAG100H004
有点像这样。我在查看文档时发现了“serial”但是不确定如何使用它实现。 任何帮助将不胜感激。谢谢。
CREATE SEQUENCE seq INCREMENT BY 1;
SELECT
'DAG100H'||lpad(nextval('seq')::text,3,'0'),
'DAG100H'||lpad(nextval('seq')::text,3,'0');
?column? | ?column?
------------+------------
DAG100H001 | DAG100H002
(1 row)
CREATE TABLE t (
id text DEFAULT 'DAG100H'||lpad(nextval('seq')::text,3,'0'),
txt text);
这样你就可以插入值了...
INSERT INTO t (txt) VALUES ('foo'),('bar');
..并且它们会获取你想要的ID
SELECT * FROM t;
id | txt
------------+-----
DAG100H001 | foo
DAG100H002 | bar
(2 rows)
'DAG100H'||lpad(nextval('seq')::text,3,'0'),
..'DAG100H010'
而不是'DAG100H0010'
。 - Gordon Linofflpad
更正了我的答案。 - Jim Jones
integer
列中存储一个递增的值,在一个varchar
列中存储前缀,当您在应用程序中_display_该数字时,连接和格式化数字。 - user330315