2014-09-02 1 views
0
내가 (필드 사이에 구분없이) 추적 데이터를 가져올

없이 데이터 :MySQL의 - 공간

20232045001100000700002769T011998-01-22 0001-01-01 0001-01-01 0  1998-01-22-13.48.03.363642 
20168752001100000700037166T011997-10-21 0001-01-01 0001-01-01 0  1997-10-21-19.00.50.529609 
20195936001100000700793006T011997-11-18 0001-01-01 0001-01-01 0  1997-11-18-17.59.30.518192 

이는 구조입니다.

:

CREATE TABLE `tabla008` (
    `numclien` varchar(8) NOT NULL DEFAULT '', 
    `centidad` varchar(4) NOT NULL DEFAULT '', 
    `coficina` varchar(4) NOT NULL DEFAULT '', 
    `digcontr` varchar(2) NOT NULL DEFAULT '', 
    `ccuenta` varchar(8) NOT NULL DEFAULT '', 
    `clainter` varchar(1) NOT NULL DEFAULT '', 
    `secinter` varchar(2) NOT NULL DEFAULT '', 
    `fealrela` varchar(10) NOT NULL DEFAULT '0000-00-00', 
    `space1` varchar(1) NOT NULL DEFAULT '', 
    `fechape` varchar(10) NOT NULL DEFAULT '0000-00-00', 
    `space2` varchar(1) NOT NULL DEFAULT '', 
    `fecancel` varchar(10) NOT NULL DEFAULT '0000-00-00', 
    `peyestat` varchar(1) NOT NULL DEFAULT '', 
    `indaviso` varchar(1) NOT NULL DEFAULT '', 
    `iugestor` varchar(6) NOT NULL DEFAULT '', 
    `pehstamp` varchar(26) NOT NULL DEFAULT '', 
    `indcoext` varchar(1) NOT NULL DEFAULT '' 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

나는이 문장 SQL

LOAD DATA LOCAL INFILE 'c:/mis/RBA/RBACalidad/Entradas/PEBC.PEFD.FIX.UNLO.TABLA008.D1140813.TXT' 
INTO TABLE tabla008 
FIELDS TERMINATED BY '' LINES TERMINATED BY '\r\n'; 

실행할 때, 결과가 함께이 데이터를 가져 싶은, 그런 을 (내가 테스트를 위해 VARCHAR 모두를 넣어야 할)

http://i.stack.imgur.com/ClpyE.png

그리고 그 결과는 다음과 같아야합니다 :

http://i.stack.imgur.com/2NYou.png

내 문장 SQL이 괜찮 으면 왜 이것이 결과인지 이해가 안됩니다!

감사

+1

당신이 출력해야한다 무엇을 제공 할 수있는 일? 당신이 제공 한 이미지로 나는 당신이 변수의 길이 때문이라고 추측 할 수 있습니다. – Saechel

+0

게시물을 편집합니다. – Alexander

+1

@Alexander 당신은 MySQL의'datatypes'에 대해 더 많이 배워야합니다.각기 다른 데이터에 대한 특정 유형의 데이터가 있습니다. 대신 모든 데이터에'varchar'라는 유형을 부여하고 있습니다. ** varchar **는 실제로 데이터를 고려하여 ** 잘못되었습니다! – Prix

답변

0

글쎄, 내가 원하는,하지만하지 않았다 이에 상응하는 유형 설정이 있어야합니다 그랬어.

나는 이것을 사용 :

LOAD DATA LOCAL INFILE 'c:/mis/RBA/RBACalidad/Entradas/TABLA008.D1140813.TXT' 
INTO TABLE tabla008 
(@row) 
SET numclien=SUBSTRING(@row,1,8), 
entidad=SUBSTRING(@row,9,4), 
oficina=SUBSTRING(@row,13,4), 
digcontrol=SUBSTRING(@row,17,2), 
cuenta=SUBSTRING(@row,19,8), 
clainter=SUBSTRING(@row,27,1), 
secinter=SUBSTRING(@row,28,2), 
fealrela=SUBSTRING(@row,30,10), 
space1=SUBSTRING(@row,40,1), 
fechape=SUBSTRING(@row,41,10), 
space2=SUBSTRING(@row,51,1), 
fecancel=SUBSTRING(@row,52,10), 
space3=SUBSTRING(@row,62,1), 
peyestat=SUBSTRING(@row,63,1), 
indaviso=SUBSTRING(@row,64,1), 
iugestor=SUBSTRING(@row,65,6), 
pehstamp=SUBSTRING(@row,71,26), 
indcoext=SUBSTRING(@row,97,1); 

그것은 우아한 해결책은 아니지만,이

1

귀하의 문제는 두 가지이다 :

  • 가져 오기 파일은 테이블의 열 정의에 맞지 않는
  • csv로의 적절한 구문을 고려하지 않는 부하 문 파일

정의가 "FIELDS TERMINATED BY ''"이면 필드 분리 기호가 전혀 없다는 것을 의미합니다. 따라서, 열 길이는 적용

귀하의 행과 필드 길이 :

20232045001100000700002769T011998-01-22 0001-01-01 
     ^split into "numclien" 
          ^split in to "centidad" 
    ... 

당신의 CSV가 탭 (\의 t)를 포함하는 경우,

 FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n'; 

에 변화가 정상 CSV가 될 것이다 통사론. 귀하의 예제에서, 파일에는 필드 분리 자로 하나 이상의 공백이 있습니다. 당신은 테스트 할 수 있습니다

 FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\r\n'; 

하지만이 행에 빈 필드를 생성 할 것으로 기대합니다. 파일을 연출하고 일련의 공백을 탭으로 대체하는 것이 더 좋습니다.

그리고 결정적 CSV는 컬럼 길이에 맞게해야 또는 열 (날짜처럼, 타임 스탬프 등이, 위의 설명 참조)

+0

안녕 모든 필드에 대해 VARCHAR()을 test로 두었습니다. 입력을 수정할 수 없습니다. 가져 오기 파일이 테이블 열 정의에 맞는지 확인했습니다. 둘 다 길이가 96입니다. 필자는 분리형 파일이 없기 때문에 FIELDS TERMINATED BY를 사용합니다. 필드 종료 시도 ''로 시도했지만 결과가 다른 것입니다. (불량) 감사합니다. – Alexander

+0

감사합니다. 일부는 희망이 없지만 구분 기호 나 필드로 구분할 수없는 한 작동하지 않습니다. 적당한 길이로; 그리고 입력이 서버의 바이오스에서 하드 코딩되지 않는 한 수정할 수 있습니다 - 그렇더라도 복사본을 만들 수 있습니다 ... –