MySql:Resultset di una query su un file CSV

← Torna a MySQL

fonte: https://www.mysqltutorial.org/mysql-export-table-to-csv/

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;