在postgres 12中将带有前导零的数字字符串转换为带有前导零的数值

covert number strings with leading zeros to numeric value with leading zero in postgres 12

我是 PostgreSQL.i 的新手,想将字符串“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

数字没有前导零。 0480480 完全 相同 - 就像 000000011

完全相同

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

some outputs of to_char function, little bit confusing?

不,一点也不。

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

Quote from the manual

9 - digit position (can be dropped if insignificant)
0 - digit position (will not be dropped, even if insignificant)

前导零总是微不足道的(从数学角度来看)。

to_char(480,'0000') 会如您所愿:一个带前导零的四位数字符串。
同样 to_char(1,'0000') 将 return 0001.

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