使用 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
上测试
我在 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
上测试