Остатки нулей слева в 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. Любая помощь будет оценена.
Ответы
Ответ 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
Ответ 3
Так же легко, как
SELECT lpad(42::text, 4, '0')
Литература:
sqlfiddle: http://sqlfiddle.com/#!15/d41d8/3665