psql中的可变数字id自动递增

问题描述

我希望 psql 表中的 column(id) 像这样 0001,0002,....,0010,0011,.....0100,0101,.....1000,1001,.. ..10000,10001

enter image description here

我用它来创建表 CREATE TABLE COMPANY(id SERIAL PRIMARY KEY,name TEXT);

解决方法

数字(整数)不存储前导零,从数学的角度来看,1000001 是完全相同的数字,因此无需存储它。如果您想显示这样的值,请使用 to_char() 来格式化值:

select to_char(id,'FM000001') as formatted_id,name
from company;

如果您不想重复,请创建一个视图:

create view company_with_formatted_id
as
select to_char(id,name
from company;

但我不会在 SQL(=后端)中进行那样的格式化。我会在显示数据的应用程序中执行此操作(=在前端)。

,

@a_horse_with_no_name 答案的替代方法是使用 lpad()

SELECT lpad(id::text,4,'0'),name FROM company;

演示

WITH company (id,name) AS (
  VALUES (1,'NAME1'),(2,'NAME2'),(42,'NAME42')  
)
SELECT lpad(id::text,'0') AS formatted_id,name
FROM company;
 formatted_id |  name  
--------------+--------
 0001         | NAME1
 0002         | NAME2
 0042         | NAME42
(3 rows)