2010-02-10 9 views
15

Używam instrukcji SQL LOADAL INFILE MySQL do ładowania danych z pliku CSV do istniejącej tabeli bazy danych.Jak zmienić datę ciągu na format daty MySQL w czasie importowania pliku CSV przy użyciu LOAD LOILAL DATA LOKALNEJ bazy danych MySQL

Oto oświadczenie przykład SQL:

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

Trzecia kolumna w pliku CSV, który mapuje do pola DateOfBirth obecnie ma datę w następującym formacie:

14-Feb-10 

Jak mogę modyfikować powyższe instrukcje SQL do sformatowania daty w formacie daty MySQL, tj. 2010-02-14?

wiem jak przekonwertować datę ciąg przy użyciu normalnej składni INSERT przy użyciu:

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

Odpowiedz

23

Trzeba użyć klauzuli SET wraz ze zmienną odwołać zawartość wiersza w tej kolumnie . Na liście kolumn przypisujesz kolumnę daty do nazwy zmiennej. Możesz go następnie użyć w swoim oświadczeniu SET. (Uwaga, nie mam MySQL przede mną to sprawdzić na.)

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') 

Zobacz przykłady drogę na dół strony: http://mysql2.mirrors-r-us.net/doc/refman/5.1/en/load-data.html (nie wiem, dlaczego ta strona wydaje się różnić od głównej dokumentacji w że rzeczywiście zawiera przykład SET eksploatacji)

+0

Być może pedantyczny, ale myślę, że powinno to być% m, a nie% M ... – Everyone

+2

@Everyone Thanks. Właściwie wygląda na to, że powinno być "% b", dla nazwy skróconego miesiąca, zgodnie z przykładem podanym w pytaniu. –

+0

Masz rację. Mój błąd. – Everyone

4

nieco bardziej długotrwałego procesu, który daje nieco elastyczności testu.

  • Zastosowanie VARCHAR (64), kolumna callsed np. mydate_text do przechowywania niesformatowanej daty, którą importujesz.
  • Obciążenie/importowania tabeli wprowadzenie daty w polu tekstowym prostym
  • wykonać zapytanie jak

    SET UPDATE mojatabela MyDate = STR_TO_DATE (mydate_text 'Y% B-%% d')

  • Jeśli wszystko wygląda OK, upuścić kolumna mydate_text

  • Jeśli to nie jest w porządku, po prostu spróbuj ponownie z nowym formacie.

Zaletą tej techniki jest to, że pozwala bawić się z formatami bez konieczności ponownego importowania tabeli za pomocą nieco groteskowej składni danych LOAD DATA, szczególnie w kolumnach tabeli długości. Jeśli wiesz dokładnie, co robisz, powyższa odpowiedź jest najlepsza. Jeśli nie jesteś ekspertem w MySQL, ta technika może być pomocna, dopóki nie uzyskasz poprawnych formatów.

Powiązane problemy