Как вы выводите результаты запроса MySQL в формате csv (на экран, а не в файл)? - PullRequest
24 голосов
/ 02 апреля 2009

Я пытаюсь вывести результаты запроса в формате с разделителями-запятыми, используя инструмент командной строки mysql. Мой пользователь mysql не имеет доступа к использованию опции «INTO OUTFILE», указанной в этом вопросе:

Как вывести результаты запроса MySQL в формате CSV?

Мне также известны опции -H и -X для форматирования вывода в html и xml соответственно, но нет ли способа вывести формат csv прямо на экран?

Я нашел этот метод, используя sed - http://tlug.dnho.net/?q=node/209. Но мне любопытно найти прямое решение MySQL.

Есть идеи?

Ответы [ 9 ]

16 голосов
/ 02 апреля 2009

В итоге я просто взял вывод с разделителями табуляции и скопировал его в электронную таблицу, а затем экспортировал в CSV. Также понял, что я мог бы использовать функцию concat или concat_ws для выполнения этой работы и сделаю это в следующий раз.

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat-ws

SELECT CONCAT_WS (',', field1, field2, field3) FROM table;

4 голосов
/ 09 мая 2015
mysql --raw --skip-column-names -u someuser -psomepass -h somehost -b somedatabase -e "select * from somedatabase.sometable;"| awk -F\\t '{print $1","$2","$3}'

-F\\t tells awk to use a tab as the delimeter on its input, and we print out the desired columns with commas as delimeters using the "," bit.  Replace "," with ":" or "|" or whatever to suit your needs.

Если вам нужно заключить в кавычки выходное поле, скажем, $ 1, ваш awk-отпечаток будет выглядеть так:

awk -F\\t '{print "\""$1"\","$2","$3}'
3 голосов
/ 14 июня 2017

Передайте ответ на вопрос tr, например:

mysql <blah blah> -B | tr '\t' ','
3 голосов
/ 02 апреля 2009

Я использую MySQL в течение многих лет, и я не знаю ни одного способа использовать только клиент командной строки mysql для вывода CSV, за исключением решений, которые вы уже нашли.

В файле есть несколько запросов к функциям для поддержки вывода CSV:

Единственное другое решение, которое я бы предложил, это написать скрипт на Perl или PHP, чтобы извлекать данные из MySQL и выводить их в формате CSV или любом другом формате, который вы хотите. Это не сложный сценарий для написания.

2 голосов
/ 22 мая 2012

Если у вас установлен MySQL Workbench, вы можете выполнить запрос и нажать «экспорт» над результатами. Это даст вам возможность сохранить как .CSV.

1 голос
/ 13 октября 2016

после Изменить формат вывода для результатов командной строки MySQL на CSV

mysql --skip-column-names --batch -e 'select * from dump3' t | awk -F'\t' '{ sep=""; for(i = 1; i <= NF; i++) { gsub(/\\t/,"\t",$i); gsub(/\\n/,"\n",$i); gsub(/\\\\/,"\\",$i); gsub(/"/,"\"\"",$i); printf sep"\""$i"\""; sep=","; if(i==NF){printf"\n"}}}'
1 голос
/ 02 апреля 2009

CLI может выводить в формате с разделителями табуляции, что почти достаточно (я говорю из опыта). Используйте опцию -B. Самая большая проблема с разделителями табуляции в том, что я не мог заставить Excel импортировать этот формат. Тем не менее, OpenOffice делает.

1 голос
/ 02 апреля 2009

Если у вас есть доступ к mysqldump, вы можете использовать что-то подобное

mysqldump -u [username] -p -t -T/path/to/directory [database] --fields-enclosed-by=\; --fields-terminated-by=,
0 голосов
/ 03 января 2014

Если вы используете mysql в интерактивном режиме, вы можете настроить пейджер на использование sed следующим образом:

$ mysql -u <user> p<passwpd>
mysql> pager sed 's/,/\n/g'
PAGER set to 'sed 's/,/\n/g''
mysql> SELECT blah FROM blah WHERE blah = blah

.
.
.
"blah":"blah"
"blah":"blah"
"blah":"blah"

Если вы не используете видеть как пейджер, вывод будет выглядеть так:

"blah":"blah","blah":"blah","blah":"blah"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...