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

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

@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.