giovedì 25 settembre 2008

Importare un file con estensione csv in una tabella MYSQL con campi definiti DATETIME o DATE

A volte abbiamo necessita' di importare un file csv in una tabella MYSQL

il comando sql per ottenere cio e': LOAD DATA LOCAL INFILE

riporto sotto un esempio di sintassi:

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE `tabella`
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'


Spesso possiamo incorrere nel problema delle date che potrebbero essere digitate DD-MM-YYYY. MYSQL adotta i valori dei campi DATE nel formato YYYY-MM-DD. Se eseguiamo l'istruzione percedente potrebbe memorizzare la data nel formato errato e allora che ci viene incontro il comando SET seguito da funzioni di MYSQL.

sotto un esempio:


set
campodata = date_format(campodata, '%d/%m/%y')


questo comando va ad integrare il precedente ottenendo cosi' la conversione della data nel corso dell'importazione.

sotto riportato il comando integrale:
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE `tabella`
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
set
campodata = date_format(campodata, '%d/%m/%y')



La stringa di formattazione supporta una serie di caratteri speciali (sempre preceduti dal carattere %). Vediamo di seguito i più utilizzati:

%d: giorno del mese (numero)
%M: nome del mese
%m: mese (numero)
%H: ora (numero da 0 a 23)
%i: minuti (numero)
%s: secondi (numero)
%Y: anno (4 cifre)
%y: anno (2 cifre)

Per tutti le altre opzioni di formattazione rinviamo alla documentazione ufficiale di MySQL.

Se nel caso il file csv contiene le informazioni dei campi nella prima riga con il comando:

ignore 1 lines

specificheremo che nell'importazione bisogna ignorare la prima riga.

esempio:

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE `tabella`
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
ignore 1 lines
set
campodata = date_format(campodata, '%d/%m/%y')

Nessun commento: