2011-02-09 2 views
0

데이터베이스에 10 진수 데이터를로드하는 데 문제가 있습니다. 특히 음수가 잘리지 않아서 알아낼 수 없습니다. 여기 로드 데이터 Infile - 음수 10 진수가 잘립니다. (양수로)

내 쿼리 모습입니다 같은 :

> CREATE TABLE IF NOT EXISTS mytable (id INT(12) NOT NULL AUTO_INCREMENT, 
            mydecimal DECIMAL(13,2),PRIMARY KEY(id)); 
> LOAD DATA INFILE 'data.dat' INTO TABLE mytable FIELDS TERMINATED BY ';'; 

그리고로드 해요은 data.dat : ​​

;000000019.50 ; 
;000000029.50-; 
;000000049.50 ; 

이 나에게 데이터가 잘립니다 "라는 경고를주고, 완료

행 2에서 열 'mydecimal' 그리고 데이터를 보면 양수로 저장됩니다. 어떤 아이디어가 이것을 고치는 방법?

답변

2

최선의 방법을 고려할 수는 로컬 변수로로드하는 것, 그 지역의 변화에 ​​기초하여 실제의 열 값을 설정할 변하기 쉬운.

귀하의 경우, 문자열을 로컬 변수에로드 한 다음, 마이너스 기호로 끝나는 지 여부에 따라 문자열을 홀로 두거나 음수로 곱할 수 있습니다. 이 같은

무언가가 당신을 위해 작동합니다 :

LOAD DATA INFILE 'data.dat' 
INTO TABLE mytable FIELDS TERMINATED BY ';' 
(id,@mydecimal) 
set mydecimal = IF(@mydecimal like '%-',@mydecimal * -1,@mydecimal); 
+0

고마워요. - 완벽하게 작동했고, 1GB 테스트 파일에 33 초가 걸렸습니다. –

0

왜 번호 앞에 마이너스 기호를 추가하는지 모르겠습니다. '-'기호를 줄의 시작 부분에두면 작동합니까?

+0

나는 것을 시도했지만 여전히 작동하지 않았다. "-"기호의 위치를 ​​마술처럼 바꿀 수 있기를 바랍니다. 나는 sed를 사용하여 '-'을 벗겨서 다른 열에 넣을 수 있습니다. 그러나 그것은 약간 뒤로 보입니다. –

0

는 입력 파일과 같은 데이터의 이상을 처리하기 위해이

CREATE TABLE IF NOT EXISTS mytable (id INT(12) NOT NULL AUTO_INCREMENT, 
mydecimal varchar(255),PRIMARY KEY(id)); 

LOAD DATA INFILE 'data.dat' INTO TABLE mytable FIELDS TERMINATED BY ';'; 

update mytable set mydecimal = 
cast(mydecimal as decimal(13,2))*if (substring(mydecimal, -1)='-', -1, 1); 

alter table mytable modify column mydecimal decimal(13,2) signed; 
+0

감사합니다. 나는 캐스트 나 하위 문자열에 대해서도 몰랐다. Ike의 방법은 27.13 + 32.77 + 23.15 = 83.25 초가 걸렸지 만 벤치 마크 결과 33.1 초에 1GB 데이터 세트가 더 빨리 작동했습니다. –