MySql:Resultset di una query su un file CSV
fonte: https://www.mysqltutorial.org/mysql-export-table-to-csv/
Indice
[nascondi]Campi NULL
Utilizzare la clausola "IFNULL" così da rimpiazzare il NULL con la stringa desiderata.
- Attenzione
- Se vengono lasciati dei NULL non gestiti, il CSV risultante potrebbe essere corrotto o sbilanciato.
Testata
Per inserire una testata nel file CSV, unire due query, di cui la prima ha i nomi dei campi.
(SELECT 'Order Number','Order Date','Status') UNION (SELECT orderNumber,orderDate, status FROM orders INTO OUTFILE 'C:/tmp/orders.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LINES TERMINATED BY '\r\n');
Vedi anche MySql:SELECT INTO OUTFILE, con UNION
Timestamp nel nome del file
SET @TS = DATE_FORMAT(NOW(),'_%Y_%m_%d_%H_%i_%s'); SET @FOLDER = 'c:/tmp/'; SET @PREFIX = 'orders'; SET @EXT = '.csv'; SET @CMD = CONCAT("SELECT * FROM orders INTO OUTFILE '",@FOLDER,@PREFIX,@TS,@EXT, "' FIELDS ENCLOSED BY '\"' TERMINATED BY ';' ESCAPED BY '\"'", " LINES TERMINATED BY '\r\n';"); PREPARE statement FROM @CMD; EXECUTE statement;
Esempio di query per l'esportazione degli interventi in corso
SET @FILENAME = CONCAT( 'C:\\\\xampp\\\\htdocs\\\\oltreweb\\\\cake\\\\app\\\\webroot\\\\tmp\\\\resultset', DATE_FORMAT(NOW(),'_%Y%m%d-%H%i%s'), '-', ROUND( RAND()*(9000)+1000 ), '.csv' ); SET @CMD = CONCAT( "(SELECT 'id_intervento', 'tecnico', 'data_pianificazione', 'data_richiesta', 'data_chiusura', 'installazione', 'partner', 'zona', 'data_conferma', 'tipo_intervento') UNION (SELECT inte.id id_intervento, tec.name tecnico, IFNULL(pla.date, 'N/A') data_pianificazione, inte.request_date data_richiesta, IFNULL(inte.close_datetime, 'N/A')data_chiusura, inst.description installazione, p.name partner, z.name zona, IFNULL(inte.confirmed_datetime, 'N/A') data_conferma, IFNULL(t.description, 'N/A') tipo_intervento FROM `aker_plannedinterventions` pla left join aker_interventions inte on inte.id = pla.intervention_id left join aker_installations inst on inst.id = inte.installation_id left join aker_partners p on p.id = inte.partner_id left join aker_partners tec on tec.id = pla.technical_id left join aker_commercialareas z on z.id = inst.commercialarea_id left join aker_interventiontypes t on t.id = inte.interventiontype_id where inte.close = 0 order by inte.id, tec.name INTO OUTFILE '", @FILENAME, "' FIELDS ENCLOSED BY '\"' TERMINATED BY ';' ESCAPED BY '\"' LINES TERMINATED BY '\r\n' ); " ); PREPARE statement FROM @CMD; EXECUTE statement;