问题描述
我希望 psql 表中的 column(id) 像这样 0001,0002,....,0010,0011,.....0100,0101,.....1000,1001,.. ..10000,10001
我用它来创建表 CREATE TABLE COMPANY(id SERIAL PRIMARY KEY,name TEXT);
解决方法
数字(整数)不存储前导零,从数学的角度来看,1
和 000001
是完全相同的数字,因此无需存储它。如果您想显示这样的值,请使用 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)