如何在PostgreSQL中实现SQL Server式的请求编号格式化计算列?
PostgreSQL 实现指定格式的请求编号计算列
你需要生成TR-0000000001这类格式的请求编号,对应SQL Server里的('TR-'+format([Id],'0000000000')),在PostgreSQL里可以通过以下两种常用方法实现:
方法一:使用lpad函数
lpad函数可将字符串填充到指定长度,不足部分用指定字符补全。把Id转为文本后,补零到10位再拼接前缀:
'TR-' || lpad(Id::text, 10, '0')
Id::text:将数值类型的Id转换为文本格式10:数字部分的目标总长度'0':用于填充空位的字符
方法二:使用to_char函数
to_char是PostgreSQL中专门用于格式化数值/日期的函数,通过格式符指定补零规则:
'TR-' || to_char(Id, 'FM0000000000')
FM:消除格式转换后可能出现的前导空格0000000000:指定生成10位数字,不足位自动用0填充
创建带计算列的表示例
如果是新建表,可直接在表定义中添加计算列:
CREATE TABLE requests ( Id SERIAL PRIMARY KEY, request_number TEXT GENERATED ALWAYS AS ('TR-' || lpad(Id::text, 10, '0')) STORED );
为现有表添加计算列示例
若要给已存在的表新增该计算列,执行以下语句:
ALTER TABLE requests ADD COLUMN request_number TEXT GENERATED ALWAYS AS ('TR-' || to_char(Id, 'FM0000000000')) STORED;
两种方法都能生成符合要求的TR-前缀加10位补零数字的请求编号,效果完全一致。
内容的提问来源于stack exchange,提问作者Ahmed Mostafa
相关产品推荐
相关产品推荐

