首页 > 解决方案 > postgres 12中带有前导零的隐蔽数字字符串到带有前导零的数值

问题描述

我是 PostgreSQL 的新手。我想将字符串 '0480' 转换为数字 0480。我正在使用强制转换运算符来执行此操作,

db=# select '0480':: numeric;

 numeric 
---------
     480
(1 row)

但在这里我期待 0480 号码。然后我尝试了 PostgreSQL 中的 to_number 函数,

db=# select to_number('0480','9999');

 to_number 
-----------
       480
(1 row)

那么这怎么可能呢?如何将带有前导零的数字字符串转换为带有前导零的数值。

还有一些 to_char 函数的输出,有点混乱?

db=# select to_char(0480,'9999');

 to_char 
---------
   480
(1 row)

db=# select to_char(0480,'09999');

 to_char 
---------
  00480
(1 row)

在 Debian 上使用 PostgreSQL 12.3

标签: postgresqlnumber-formattingnumericpostgresql-12

解决方案


数字没有前导零。0480完全相同的数字480- 就像00000001是完全相同的数字1

获得前导零的唯一方法是将数字转换为字符串并添加所需数量的前导零。

to_char 函数的一些输出,有点混乱?

不,一点也不。

to_char(0480,'9999')将数字转换480为 4 个字符的字符串。9表示如果该数字没有值,则可以“删除”它。

从手册中引用

9位位置(如果无关紧要可以丢弃)
0位位置(即使无关紧要也不会丢弃)

前导零总是无关紧要的(从数学角度来看)。

to_char(480,'0000')会如你所愿:一个前导零的四位数字符串。
同样to_char(1,'0000')会返回0001

请注意,默认情况下, 的所有输出都to_char()与前导空格右对齐。如果你不想这样,你应该使用FM修饰符:例如to_char(1,'FM0000')


推荐阅读