2012-06-24 4 views
1

postgresql 데이터베이스에 열이 있습니다. 복권 번호입니다. 길이가 정확히 4 자리. 처음에는 int의 데이터 유형을 가지고있었습니다. 나는 모든 추첨 번호를 삽입했다. 내가 모든 숫자를 삽입 한 후에 나는 그것을 0으로 잘라 버렸음을 알았다. 예를 들어 0925는 925입니다. 데이터 유형을 varchar로 수정했지만 이제는 동일한 데이터로 int에서 varchar로 수정하는 방법을 찾아야합니다. 데이터의 길이는 4 자리 여야합니다. 얼마나 많은 문제 번호가 있는지 파악하려고했는데 4 행보다 적은 행이 얼마나 많은지를 알려주는 select 문을 쓸 수 없었습니다.숫자가 int에서 varchar로 변경됩니다.

어떻게해야합니까?

감사합니다.

답변

4

얼마나 많은 문제 번호가 있는지 알아 내려고했는데 몇 줄이 4 자리 미만인지를 알려주는 select 문을 쓸 수 없었습니다.

SELECT COUNT(*) 
FROM lottery 
WHERE char_length(x) < 4 

온라인으로 작업을 참조하십시오 sqlfiddle

이를 해결하려면, 당신은 유용한 lpad을 찾을 수 있습니다. WHERE 절은 실제로 필요하지 않습니다.

UPDATE lottery 
SET x = lpad(x, 4, '0') 

온라인으로 작업을 참조하십시오 : sqlfiddle

+0

추첨에서 SELECT COUNT (*) 추첨 x <1000'으로 계산하는 것이 간단하지 않습니까? – kgrittn

+0

@kgrittn : "varchar로 데이터 유형을 수정했습니다"라는 가정하에 작업하고 있습니다. –

1

형식 귀하의 번호를 to_char()로 :

SELECT to_char(123, 'FM0000'); 

심지어 단지 정수로 그대로두고 쿼리에서 식을 사용할 수 있습니다.

또는 장소에서 텍스트로 다시 정수로부터 열을 변환 : 당신이 이미 가지고있는 varchar에 숫자를 변환하는 것 때문에

ALTER TABLE tbl ALTER column col TYPE text USING to_char(col, 'FM0000'); 

이 표현은 정수로 추가 캐스팅이 필요합니다 :

SELECT to_char(col::int, 'FM0000') 
FROM tbl; 
관련 문제