Как вы выводите результаты запросов MySQL в формате csv (на экран, а не в файл)?
Я пытаюсь вывести результаты запроса в формате с разделителями-запятыми, используя инструмент командной строки mysql. Мой пользователь mysql не имеет доступа к использованию опции "INTO OUTFILE", указанной в этом вопросе:
Как выводить результаты запросов MySQL в формате CSV?
Я также знаю параметры -H и -X для форматирования вывода в html и xml соответственно, но нет ли способа вывода формата csv непосредственно на экран?
Я нашел этот метод, используя sed - http://tlug.dnho.net/?q=node/209. Но мне любопытно найти прямое решение mysql.
Любые идеи?
Ответы
Ответ 1
В итоге я просто сделал вывод с разделителями табуляции и скопировал его в электронную таблицу, а затем экспортировал ее в 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;
Ответ 2
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 -F\\t '{print "\""$1"\","$2","$3}'
Ответ 3
Я много лет использую MySQL, и я не знаю, как использовать только клиент командной строки mysql
для создания CSV-вывода, за исключением тех решений, которые вы уже нашли.
В файле с поддержкой CSV имеется несколько запросов функций:
Единственное другое решение, которое я бы предложил, - написать script в Perl или PHP, чтобы получить данные из MySQL и вывести их в формате CSV или в любом другом формате, который вы хотите. Это не сложно написать script.
Ответ 4
Если у вас установлен MySQL Workbench, вы можете запустить запрос и нажать "экспорт" над результатами. Это даст вам возможность сохранять как .CSV.
Ответ 5
Если у вас есть доступ к mysqldump, вы можете использовать что-то вроде этого
mysqldump -u [username] -p -t -T/path/to/directory [database] --fields-enclosed-by=\; --fields-terminated-by=,
Ответ 6
CLI может выводиться в формате с разделителями табуляции, что почти достаточно хорошо (я говорю по опыту). Используйте опцию -B. Самая большая проблема с разделителем табуляции заключается в том, что я не мог заставить Excel импортировать этот формат. Однако OpenOffice делает.
Ответ 7
после Измените формат вывода для результатов командной строки 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"}}}'
Ответ 8
Выполните ответ на tr
, например:
mysql <blah blah> -B | tr '\t' ','
Ответ 9
Если вы используете 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"