2010-02-10 2 views
15

MySQL의 LOAD DATA LOCAL INFILE SQL 문을 사용하여 CSV 파일의 데이터를 기존 데이터베이스 테이블로로드하고 있습니다.MySQL의 LOAD DATA LOCAL INFILE을 사용하여 CSV 가져 오기시 문자열 날짜를 MySQL 날짜 형식으로 변경하는 방법

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE my_table 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
(name, address, dateOfBirth) 

현재 다음과 같은 형식으로 날짜가있는 생년월일 (DateOfBirth) 필드에 매핑되는 CSV의 세 번째 칼럼 :

14-Feb-10 

는 어떻게 수정할 수 있습니다 여기에

는 예를 들어 SQL 문입니다 위의 SQL 문을 MySQL의 날짜 형식 즉, 2010-02-14으로 포맷 하시겠습니까?

STR_TO_DATE('14-Feb-10', '%d-%b-%y')

답변

23

당신은 그 열에서 행의 내용을 참조하는 변수와 함께 SET 절을 사용해야합니다

내가 사용하는 일반 INSERT 구문을 사용하는 경우 문자열 날짜를 변환하는 방법을 알고 . 열 목록에서 날짜 열을 변수 이름에 할당합니다. 그런 다음 SET 성명에서 사용할 수 있습니다. (나는이에 테스트하기 위해 내 앞에 MySQL이 없어, 참고.)

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE my_table 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
(name, address, @var1) 
set dateOfBirth = STR_TO_DATE(@var1, '%d-%b-%y') 

가에 페이지 아래 예제를하는 방법을 참조하십시오 (http://mysql2.mirrors-r-us.net/doc/refman/5.1/en/load-data.html 확실하지 않음이 페이지는 주요 문서에 다를 것으로 보인다 이유 실제로 SET 사용의 예를 포함)에게 테스트 유연성을 조금 준다

+0

아마도 Pedantic은 아마도 % M이 아닌 % M이어야한다고 생각합니다. – Everyone

+2

@ 모두 감사합니다. 실제로 질문에 주어진 예제에 따르면, 약자로 된 월 이름의 경우 '% b'이어야합니다. –

+0

네 말이 맞아. 내 잘못이야. – Everyone

4

약간 더 긴 과정 :.

  • 사용하십시오 VARCHAR (64) 컬럼 callsed 예를. mydate_text - 가져온 형식화되지 않은 날짜를 보유합니다.
  • 로드 업 /이 일반 텍스트 필드
  • 실행

    UPDATE MYTABLE SET MyDate가 = STR_TO_DATE 같은 쿼리에 날짜를 넣어 테이블 가져 오기 (mydate_text를, '% Y- % B- % D')

  • 아무 문제가없는 경우 mydate_text 열을 삭제하십시오.

  • 괜찮 으면 다시 새로운 형식으로 시도하십시오.

이 기법의 장점은 다소 복잡한 MySQL LOAD DATA 구문, 특히 길이 테이블 열을 사용하여 테이블을 다시 가져올 필요없이 포맷으로 재생할 수 있다는 점입니다. 정확히 무엇을하고 있는지 알고 있다면 위의 대답이 가장 좋습니다. MySQL에 익숙하지 않다면,이 기술은 형식이 정확할 때까지 도움이 될 수 있습니다.

관련 문제