2009-06-23 76 views
8

Ho una query che esporta i dati da due colonne di ogni riga in un file. Nei dati del file da ciascuna colonna devono essere separate da ritorno a capo, qualcosa di simile:MySQL: ritorno a capo nella query

row1column1
row1column2
row2column1
row2column2
row3column1
row3column2

Ho provato ad utilizzare char (13) :

SELECT CONCAT(column1, char(13), column2) FROM my_table INTO outfile 'my_file' 

e il file di output sembrava perfettamente soddisfacente (eac h i dati di colonna erano in un'altra riga), ma quando l'ho usato come input per un programma che dovrebbe accettare il formato descritto, non lo ha riconosciuto. Tuttavia, quando ho cancellato manualmente tutti i ritorni a capo nel file e li ho aggiunti di nuovo premendo il tasto "invio", il mio programma ha riconosciuto il file senza problemi. Quando ho provato con char (13), char (10), il mio file di output si presentava così:

row1column1
\
row1column2
row2column1
\
row2column1

sono sicuro Mi manca qualcosa di ovvio qui :)

+0

qual è il formato del file di output , file csv? –

risposta

7

lo vedo nel sito mysql, spero che sia d'aiuto.

si dovrebbe usare la seguente sintassi per creare un file CSV nel formato previsto da Microsoft Excel:

... INTO OUTFILE '/temp.csv' CAMPI sfuggito BY ' ""' denuncia da parte di '' CHIUSA dA '"' righe che terminano con '\ r \ n';

Tuttavia campi con trasporto restituisce può rompere il CSV come MySQL chiuderà automaticamente un campo quando il \ r \ n interruzione di riga trovata. Per lavorare su , sostituisci tutti \ r \ n interrompe con \ n. Il campo non si chiude su \ n interruzioni e verrà letto in una singola cella in Excel. È possibile farlo nella stessa istruzione SQL, per esempio, :

SELEZIONA REPLACE (field_with_line_breaks, '\ r \ n', '\ n') FROM tabella in '/temp.csv' OUTFILE CAMPI sfuggito BY ' ""' denuncia da parte di '' CHIUSA dA '"' righe che terminano con '\ r \ n';

ho anche scoperto che i valori nulli potrebbero rompere il CSV, che possono essere gestiti in a. modo simile:

SELEZIONA IFNULL (possibile_nullo_campo, "") DA tabella INTO OUTFILE '/ temp.csv ' CAMPI escape dal ' ''' risolto da ',' racchiuso da '"' linee terminate DA '\ r \ n';

Nota: questa sostituisce valori NULL con una stringa vuota che è tecnicamente non è la stessa cosa, ma vi darà si una cella vuota in Excel invece di rompere la struttura del CSV e spostando le seguenti celle a sinistra

4

provare solo char (10) -. questo è "\ n "- il modo UNIX
Just char (13) "\ r" è il (vecchio) modo mac e "\ r \ n" è il modo di Windows, ma ho il sospetto che MySQL usi solo \ n per ogni riga, quindi dovrai abbinarlo.

+0

Questo mette semplicemente "\" tra due colonne – Daniel

+0

Si noti che per far funzionare la query sulla CLI (mysql -Ne) ho dovuto usare i campi -r Write senza conversione. Utilizzato con --batch. HTH, Dan. –

1

Probabilmente avete problemi con le differenze nell'interpretazione di newline tra i sistemi operativi.

Se il database MySQL è su Unix/Linux, e un file verrà letto su Unix o database su Windows e verrà letto su Windows quindi provare questo:

select * into outfile 'my_file' 
fields terminated by '\n' lines terminated by '\n' 
from my_table; 

Se il database MySQL è il Unix/Linux, e un file verrà letto su Windows quindi provare questo:

select * into outfile 'my_file' 
fields terminated by '\r\n' lines terminated by '\r\n' 
from my_table; 

È anche possibile convertire un file tra "CRLF" (Windows) e "LF" a capo (Unix) utilizzando un piccolo, a riga di comando utility chiamata dos2unix e unix2dos, che è inclusa nella maggior parte delle distribuzioni Linux.

4

opere risposta di Haim Evgi, ma:

SELECT REPLACE(field_with_line_breaks, '\r\n', '\n') FROM table INTO OUTFILE '/temp.csv' FIELDS ESCAPED BY '""' TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'; 

ho dovuto cambiare a:

SELECT REPLACE(field_with_line_breaks, '\r\n', '\n') FROM table INTO OUTFILE '/temp.csv' FIELDS ESCAPED BY '"' TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'; 

C'era un doppio apice nei campi sfuggito BY, che ha dato questo errore in mysql: " Errore 1083: L'argomento del separatore di campo non è quello che ci si aspetta, controllare il manuale ".

La modifica di una virgoletta ha interrotto l'errore ed ha esportato un file. Sono stato in grado di importarlo in Excel con successo con le nuove righe formattate correttamente.

+0

Penso che dovresti aver appena modificato la risposta di Haim Evgi. L'ho fatto; non è ancora stato approvato. –

Problemi correlati