Записать результаты sql-запроса в файл в mysql

Экспорт из MySQL в CSV с помощью командной строки




Вы можете выполнить экспорт без излишеств через CLI, выбрав все данные в таблице и указав место, куда их нужно сохранить.




Начните с открытия оболочки MySQL, затем переключитесь на базу данных, которую вы хотите экспортировать.




Введите следующую команду:




SELECT * FROM myTable 
INTO OUTFILE ' mpmyExportFile.csv' 
FIELDS ENCLOSED BY '"' 
TERMINATED BY ';' 
ESCAPED BY '"' 
LINES TERMINATED BY '';




Замените myTable реальным именем таблицы из вашей базы данных. Вы можете заменить mpmyExportFile.csv любым другим именем файла или местоположением. Не забудьте сохранить имя файла .csv в конце.




Примечание. В этом примере используется местоположение файла Linux. Если вы работаете в Windows, вы можете использовать c:/folder/file.csv для вашего местоположения файла.




Дополнительные параметры для экспорта из MySQL




Чтобы указать отдельные наборы данных для экспорта из таблицы:




SELECT column1, column2, column3, column4 
FROM myTable 
WHERE column2 = 'value';




Замените column1 (и остальные) фактическими именами столбцов, которые вы хотите экспортировать. Обязательно используйте команду FROM, чтобы указать таблицу, из которой вы экспортируете. Оператор WHERE является необязательным и позволяет экспортировать только те строки, которые содержат определенное значение. Замените значение фактическим значением, которое вы хотите экспортировать. Например:




SELECT order_date, order_number, order_status 
FROM current_orders 
WHERE order_status='pending';




<Экспорт и временная метка (timestamp) CSV-файла




Используйте следующую команду для экспорта в файл CSV и добавьте метку времени для времени создания файла:




SET @TS = DATE_FORMAT(NOW(),'_%Y_%m_%d_%H_%i_%s'); 
SET @FOLDER = ' mp'; 
SET @PREFIX = 'myTable'; 
SET @EXT = '.csv'; 
SET @CMD = CONCAT("SELECT * FROM myTable INTO OUTFILE '",@FOLDER,@PREFIX,@TS,@EXT, "' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"'"," LINES TERMINATED BY ' ';"); PREPARE statement FROM @CMD; EXECUTE statement;




Как обычно, замените myTable реальным именем экспортируемой таблицы.




Примечание: вы можете заметить команду SELECT * FROM в скобках. Мы обернули команду в функцию, которая добавляет метку времени.




Экспорт с заголовками столбцов




Используйте оператор UNION для добавления заголовков столбцов в экспортируемый файл:




(SELECT 'column1','column2','column3','column4') 
UNION (SELECT column1, column2, column3, column4 
FROM myTable 
INTO OUTFILE ' mpmyExportFile.csv' 
FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' 
LINES TERMINATED BY ' ')




Работа с пустыми значениями




Если в базе данных есть нулевые (пустые) значения, этот процесс экспортирует их как букву N. Вы можете заменить значения NULL другой строкой текста, которая имеет больше смысла:SELECT column1, column2, IFNULL(column3, ‘N/A’) FROM myTable INTO OUTFILE ‘ mpmyExportFile.csv’ FIELDS ENCLOSED BY ‘»‘ TERMINATED BY ‘;’ ESCAPED BY ‘»‘ LINES TERMINATED BY ‘);




В этом случае команда IFNULL ищет пустые значения в column3. Когда он находит их, он заменяет их текстовой строкой N/A.







Но иногда может выдавать ошибку




ERROR 1290 (HY000) at line 1: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

Тогда можно воспользоваться командой 

 mysql -u root -p my_db < /tmp/113183.txt | sed "s/'/'/;s/t/","/g;s/^/"/;s/$/"/;s/n//g" > /tmp/o_113183.csv

Тогда файл o_113183.csv будет готов для открытия его в excel. 

Источник: https://wiki.merionet.ru/articles/eksport-i-import-csv-v-mysql



2023-08-16T11:31:29
Software