为什么 to_char 左填充空格?

Eva*_*oll 7 postgresql cast number-formatting string-representation

当我使用099指示 0 填充的 3 位数字时,我会在左侧得到空格。

SELECT '>' || to_char(1, '099') || '<';
 ?column? 
----------
 > 001<
(1 row)
Run Code Online (Sandbox Code Playgroud)

为什么to_char这里是左填充?为什么会有前导空格?

Eva*_*oll 11

你可以在这里看到一个更简单的测试用例

SELECT '>' || to_char(1, '0') || '<';
 ?column? 
----------
 > 1<
(1 row)
Run Code Online (Sandbox Code Playgroud)

这是因为,正如@Abelisto 所说,空间是为符号字形保留的,

SELECT '>' || to_char(-1, '0') || '<';
 ?column? 
----------
 >-1<
(1 row)
Run Code Online (Sandbox Code Playgroud)

您可以使用FM, 从文档中抑制符号

Modifier Description Example
FM       prefix      fill mode (suppress leading zeroes and padding blanks) FM9999
Run Code Online (Sandbox Code Playgroud)

所以你想要的是

SELECT '>' || to_char(1, 'FM099') || '<';
Run Code Online (Sandbox Code Playgroud)

当您要求它们时,零不会被抑制 FM0

  • 另外:它是符号的地方,例如`SELECT '&gt;' || to_char(-1, '0') || '&lt;';` 不输出空格。 (2认同)