Прокладення нулів зліва в postgreSQL


103

Я відносно новий користувач PostgreSQL і знаю, як змінити число з нулями вліво в SQL Server, але я намагаюся зрозуміти це в PostgreSQL.

У мене стовпчик цифр, де максимальна кількість цифр - 3, а хв - 1: якщо це одна цифра, вона має дві нулі зліва, а якщо це 2 цифри, то вона має 1, наприклад 001, 058, 123.

У SQL Server я можу використовувати наступне:

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

Цього не існує в PostgreSQL. Будь-яка допомога буде вдячна.


2
Використання google саме так я знайшов цю сторінку. Це був мій результат google номер один.
Джейсон

Можливий дублікат функції to_char (число) у postgres
Еван Керролл

Якщо говорити про SQL Server, вони мають format()функцію, яка дозволить вам використовувати format(Column1,'000') as Column2.
Манго

Відповіді:


179

Ви можете використовувати функції 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
@EvanCarroll - це правильна відповідь - про що ти говориш?
Ярін

@Yarin Ця відповідь є стандартизованим методом виклику однієї функції з рядками формату. Використовуючи RPAD / LPAD, ви перетворюєте на рядки та обробляєте струни. Використовуючи to_char, ви просто вказуєте інший метод строфіфікації.
Еван Керролл

3
@EvanCarroll вони обидва корисні - цей дозволяє вказати число для довжини рядка - інший вимагає знаходження 'fm' для режиму заливки і дозволяє вказати форматне зображення
Брайан Бернс

ПОПЕРЕДЖЕННЯ: На відміну від класичних printf, ці функції з головою на кістках будуть мовчки рубати вашу струну до розміру, якщо вона не підходить. Тож вам може знадобитися case when length(foo) ...навколо цього.
Сем Уоткінс

62

to_char()Функція є на номери формату:

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

fmПрефікс ( «режим заповнення») дозволяє уникнути початкових прогалин в результаті VARCHAR. 000Просто визначає кількість цифр , які ви хочете мати.

psql (9.3.5)
Наберіть "довідка" для довідки.

postgres => з sample_numbers (nr) як (
postgres (> значення (1), (11), (100)
постгреси (>)
postgres-> вибрати to_char (nr, 'fm000')
postgres-> від sample_numbers;
 to_char
---------
 001
 011
 100
(3 ряди)

postgres =>

Більш детальну інформацію про формат зображення див. У посібнику:
http://www.postgresql.org/docs/current/static/functions-formatting.html


2
Якщо число занадто довге, to_charперетворюйте його в ###. Оо
Сем Уоткінс

Мені цікаво, чи є рішення проблеми, де, якщо #, якщо довше зазначеного в to_Char, воно перетворюється на ###. Чи все-таки є конкретна мінімальна кількість нулів, а потім зростатимуть більші числа? Наприклад, якщо ви вказали 3 для lpad, номери будуть відформатовані як 001 010 100 .. 1001
Майк Хеннессі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.