postgreSQL에서 왼쪽으로 0 채우기


103

저는 PostgreSQL을 처음 접했고 SQL Server에서 왼쪽에 0으로 숫자를 채우는 방법을 알고 있지만 PostgreSQL에서 이것을 파악하기 위해 고군분투하고 있습니다.

최대 자릿수가 3이고 최소값이 1 인 숫자 열이 있습니다. 한 자리이면 왼쪽에 두 개의 0이 있고 2 자리이면 1이 있습니다 (예 : 001, 058, 123).

SQL Server에서는 다음을 사용할 수 있습니다.

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

PostgreSQL에는 존재하지 않습니다. 어떤 도움을 주시면 감사하겠습니다.


2
Google을 사용 하는 것이 정확히이 페이지를 찾은 방법입니다. 내 최고의 Google 결과였습니다.
Jason


SQL Server에 대해 말하자면, 그들은 format()당신이 사용할 수 있는 기능 을 가지고 있습니다 format(Column1,'000') as Column2.
Manngo

답변:


179

rpadlpad함수를 사용하여 각각 오른쪽 또는 왼쪽으로 숫자를 채울 수 있습니다. 이것은 숫자에서 직접 작동하지 않으므로 사용 ::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

@Yarin 이 대답 은 형식 문자열이있는 표준화 된 단일 함수 호출 방법입니다. RPAD / LPAD를 사용하여 문자열로 변환 한 다음 문자열을 처리합니다. to_char를 사용하면 다른 문자열 화 방법을 지정하는 것입니다.
Evan Carroll

3
그들은 모두 유용하다 @EvanCarroll - 다른 하나는 'FM'은 채우기 모드의 약자 알고 필요하고 당신이 그림 서식을 지정할 수 있습니다 -이 하나는 문자열 길이의 수를 지정할 수 있습니다
브라이언 화상

경고 : 클래식과는 달리 printf이러한 뼈 머리 함수는 크기가 맞지 않으면 자동으로 문자열을 자릅니다. 따라서 case when length(foo) ...주변에 필요할 수 있습니다 .
Sam Watkins

62

to_char()기능은 숫자 형식을 지정하는 데 있습니다.

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

fm접두사 ( "채우기 모드") 결과 VARCHAR에서 선행 공백을 방지 할 수 있습니다. 은 000단순히 당신이 갖고 싶어 자리의 수를 정의합니다.

psql (9.3.5)
도움말을 보려면 "help"를 입력하십시오.

postgres => with sample_numbers (nr) as (
postgres (> 값 (1), (11), (100)
postgres (>)
postgres-> to_char (nr, 'fm000') 선택
sample_numbers의 postgres->;
 to_char
---------
 001
 011
 100
(3 열)

postgres =>

형식 그림에 대한 자세한 내용은 http://www.postgresql.org/docs/current/static/functions-formatting.html 설명서를 참조하십시오
.


2
숫자가 너무 길면 to_char###으로 변환합니다. Oo
Sam Watkins 19 년

# to_Char에 지정된 것보다 길면 ###으로 변환되는 문제에 대한 해결책이 있는지 궁금합니다. 어쨌든 0의 최소 수를 지정하고 그로부터 더 큰 숫자가 커지나요? 예를 들어 lpad에 3을 지정하면 숫자는 001 010 100 .. 1001
mike

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.