首页 > 解决方案 > 如何在 Postgresql 中将尾随或前导零添加到“0.1201”或“01.00”总共 7 个数字

问题描述

如何在 Postgresql中添加尾随或前导零0.1201或总共 7 个数字?1.00

假设我有下面的数据,我们必须将数字存储在 varchar 列中(这不是一个损坏的数据库设计,我们在这个列中也有一些 02.34x924 的值,你能告诉我如何将它们保存到数字或双倍)

numbers
0.1201
 1.00 
26.25
02.34x924

我期望的输出是,小数点左边两个数字,小数点右边四个数字,包括小数点总共7个数字

numbers
00.1201
01.0000 
26.2500
02.34x924

我可以使用下面的 SQL 让 26.25 等于 26.2500,但我无法处理0.1201 1.00

select 
case when length(numbers) < 7 then rpad(numbers, 7, '0') else numbers end numbersnew
from mytable

标签: sqlpostgresql

解决方案


我会将值分成两部分,然后分别填充每个部分。

select concat(lpad(p1, 2, '0'), 
              '.', p2, 
              rpad('0', 4 - length(p2), '0'))
from (
  select trim(split_part(numbers, '.', 1)) as p1, 
         trim(split_part(numbers, '.', 2)) as p2 
  from my_table
) t  

派生表主要是为了避免重复表达式来获取每个部分。

我会将其放入一个函数中,以使您的查询更易于阅读:

create function format_my_string(p_input text)
  returns text
as
$$
select concat(lpad(p1, 2, '0'), 
              '.', p2, 
              rpad('0', 4 - length(p2), '0'))
from (
  select trim(split_part(p_input, '.', 1)) as p1, 
         trim(split_part(p_input, '.', 2)) as p2 
) t;
$$
language sql
immutable;

然后像这样使用它:

select format_my_string(numbers)
from my_table

推荐阅读