微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Postgresql中将尾随或前导零添加到`0.1201`或`01.00`总共7个数字

如何解决如何在Postgresql中将尾随或前导零添加到`0.1201`或`01.00`总共7个数字

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

假设我有下面的数据,我们必须将数字存储在 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

解决方法

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

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,'0'))
from (
  select trim(split_part(p_input,trim(split_part(p_input,2)) as p2 
) t;
$$
language sql
immutable;

然后像这样使用它:

select format_my_string(numbers)
from my_table

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?