скрытые числовые строки с ведущими нулями до числового c значения с ведущим нулем в postgres 12 - PullRequest
0 голосов
/ 09 июля 2020

Я новичок в PostgreSQL. Я хочу преобразовать строку '0480' в число 0480. Я использую для этого оператор приведения,

db=# select '0480':: numeric;

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

, но здесь я ожидаю номер 0480. Затем я попытался использовать функцию to_number в PostgreSQL,

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

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

, так как это возможно? как я могу преобразовать числовые строки с ведущими нулями в numeri c значение с ведущим нулем.

также некоторые выходные данные функции to_char, немного запутанные?

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

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

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

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

Использование PostgreSQL 12.3 в Debian

1 Ответ

1 голос
/ 09 июля 2020

В числах нет ведущих нулей. 0480 - это точно то же число, что и 480 - точно так же, как 00000001 - это точно такое же число, как 1

Единственный способ получить ведущие нули - это преобразовать число в строку и добавьте желаемое количество начальных нулей.

некоторые выходы функции to_char, немного сбивает с толку?

Нет, совсем нет.

to_char(0480,'9999') преобразует число 480 в строку из 4 символов. 9 указывает, что если для этого di git нет значения, его можно «отбросить».

Цитата из руководства

9 - позиция di git (можно отбросить если несущественно )
0 - позиция di git ( не будет отброшено , даже если незначительно)

Начальные нули всегда не имеют значения (с математической точки зрения).

to_char(480,'0000') сделает то, что вы ожидаете: строка из четырех di git с начальным нулем. Точно так же to_char(1,'0000') вернет 0001.

Обратите внимание, что по умолчанию весь вывод to_char() выровнен по правому краю с ведущими пробелами. Если вы этого не хотите, вы должны использовать модификатор FM: например, to_char(1,'FM0000')

...