【问题标题】:Variable Digit id autoincrement in psqlpsql中的可变数字ID自动增量
【发布时间】:2021-09-08 13:05:19
【问题描述】:

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

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

【问题讨论】:

标签: sql postgresql auto-increment


【解决方案1】:

数字(整数)不存储前导零,从数学角度来看,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, 'FM000001') as formatted_id, name
from company;

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

【讨论】:

    【解决方案2】:

    @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,4,'0') AS formatted_id ,name
    FROM company;
     formatted_id |  name  
    --------------+--------
     0001         | NAME1
     0002         | NAME2
     0042         | NAME42
    (3 rows)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2014-11-18
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多