使用 PostgreSQL 在特定位置删除小数点并连接零

Remove a decimal and concat zero at a specific position using PostgreSQL

我在 invoices table.

中有一个名为 invoice_number varchar(255) 的列

这是一些示例数据:

20220010000000010
20220010000000011
20220010000000012

一个invoice_number最多可以有17位数字。这是它生成的格式:

年份(4位)+发票编号(3位)+资料编号(10位)

目前我在这个栏目有一些数据如下:

202200100000022.1
202200100000022.2
202200100000022.3

我想删除倒数第二位的小数点,然后在第 8 位(根据上面的示例数据,在 001 之后)添加一个零来处理所有这些不需要的发票号。

预期输出:

20220010000000221
20220010000000222
20220010000000223

最好的方法是什么?

一个安全的方法是使用 REGEXP_REPLACE.

select invoice_number
, regexp_replace(invoice_number, '^([0-9]{4})([0-9]{3})([0-9]{8})[.]([0-9]+)$', '') as new_invoice_number
from (values
  ('202200100000022.1')
, ('202200100000022.2') 
, ('202200100000022.3') 
) q(invoice_number)
where invoice_number like '%.%';
invoice_number new_invoice_number
202200100000022.1 20220010000000221
202200100000022.2 20220010000000222
202200100000022.3 20220010000000223

db<>fiddle here

上测试