首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用自动增量列在postgresql中生成固定长度的字符串?

如何使用自动增量列在postgresql中生成固定长度的字符串?
EN

Stack Overflow用户
提问于 2021-04-06 05:04:56
回答 2查看 274关注 0票数 1

我使用Postgresql 11,我有一个字符串列,它是固定的8长度数字号码。这个值应该是序列0000000100000002等等。我知道Postgresql支持SEQUENCE列,但是如何使它成为一个固定长度的字符串?

一种解决方案是使用两种SQL,一种是使用序列列(即整数)对行进行insert,另一种是根据序列列值更新行,使其成为例如00000001

我也来交叉LPAD函数,但不确定它是否适用于这种情况。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-06 06:16:13

只需创建一个标准序列,然后使用lpad来填充所需的零:

代码语言:javascript
运行
复制
CREATE SEQUENCE seq1;

SELECT lpad(nextval('seq1')::text,8,'0');

   lpad   
----------
 00000001

编辑:正如@a_horse_with_no_name的评论中所提到的,to_char()是一个很好的替代方案

代码语言:javascript
运行
复制
SELECT to_char(nextval('seq1'), 'FM00000000');
 to_char  
----------
 00000001

演示:db<>fiddle

票数 1
EN

Stack Overflow用户

发布于 2021-04-06 06:45:11

我不会用这种方式储存号码的。创建标识列,并在显示值时使用to_char()lpad()。如果您非常需要这一点,您可以创建一个视图,以避免一直编写表达式:

代码语言:javascript
运行
复制
create table the_table
(
  id integer generated always as identity (maxvalue 99999999),
  ... other columns
);


create view the_table_with_formatted_id
as
select lpad(id::text, 8, '0') as formatted_id, 
       ... other columns
from the_table;

另一个选项是在text列的默认值中使用序列:

代码语言:javascript
运行
复制
create sequence the_table_id_seq;
create table t
( 
  id text default lpad(nextval('the_table_id_seq')::text, 8, '0'), 
  ... other columns ...
);

identity列不同,上面的内容并不阻止插入绕过序列并将abcdefgh存储到该列中。如果您想确保它是一个严格的数值(但格式化的)值,那么使用标识列是一个更好的选择。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66962960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档