Подтвердить что ты не робот

Остатки нулей слева в postgreSQL

Я относительно новичок в PostgreSQL, и я знаю, как заполнить число с нулями слева в SQL Server, но я изо всех сил пытаюсь понять это в PostgreSQL.

У меня есть столбец чисел, где максимальное число цифр равно 3, а min равно 1: если одна цифра имеет два нуля влево, а если это 2 цифры, то это 1, например. 001, 058, 123.

В SQL Server я могу использовать следующее:

RIGHT('000' + cast([Column1] as varchar(3)), 3) as [Column2]

Это не существует в PostgreSQL. Любая помощь будет оценена.

4b9b3361

Ответ 1

Вы можете использовать функции rpad и lpad для ввода чисел справа или слева соответственно. Обратите внимание, что это не работает непосредственно по номерам, поэтому вам нужно использовать ::char или ::text для их добавления:

SELECT RPAD(numcol::text, 3, '0'), -- Zero-pads to the right up to the length of 3
       LPAD(numcol::text, 3, '0'), -- Zero-pads to the left up to the length of 3
FROM   my_table

Ответ 2

Функция to_char() предназначена для форматирования чисел:

select to_char(column_1, 'fm000') as column_2
from some_table;

Префикс fm позволяет избежать ведущих пробелов в полученном varchar. 000 просто определяет количество цифр, которое вы хотите иметь.

psql (9.3.5)
Type "help" for help.

postgres=> with sample_numbers (nr) as (
postgres(>     values (1),(11),(100)
postgres(> )
postgres-> select to_char(nr, 'fm000')
postgres-> from sample_numbers;
 to_char
---------
 001
 011
 100
(3 rows)

postgres=>

Подробнее об изображении формата см. в руководстве:
http://www.postgresql.org/docs/current/static/functions-formatting.html