webdevqa.jp.net

MySQLクエリの結果をcsv形式で(ファイルではなく画面に)出力するにはどうすればよいですか?

Mysqlコマンドラインツールを使用して、クエリ結果をカンマ区切り形式で出力しようとしています。私のmysqlユーザーには、この質問で参照されている「INTO OUTFILE」オプションを使用するためのアクセス権がありません。

MySQLクエリ結果をCSV形式で出力する方法

また、出力をhtmlおよびxmlでフォーマットする-Hおよび-Xオプションも認識していますが、csvフォーマットを画面に直接出力する方法はありませんか?

私はsed- http://tlug.dnho.net/?q=node/209 を使用してこのメ​​ソッドを見つけました。しかし、私はまっすぐなmysqlソリューションを見つけることに興味があります。

何か案は?

25
RyanW

結局、タブ区切りの出力を取り、それをスプレッドシートにコピーして貼り付け、それを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;

18
RyanW
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}'
4
Nevaar

私は何年もMySQLを使用してきましたが、すでに見つけたソリューションを除いて、mysqlコマンドラインクライアントだけを使用してCSV出力を生成する方法を知りません。

CSV出力をサポートするためにファイルにいくつかの機能リクエストがあります:

私が提案する他の唯一の解決策は、PerlまたはPHPでスクリプトを記述し、MySQLからデータをフェッチして、CSV形式またはその他の必要な形式で出力することです。これは、書くのが難しいスクリプトではありません。

4
Bill Karwin

次のように、回答をtrにパイプします。

mysql <blah blah> -B | tr '\t' ','
3
Dom Storey

Mysqldumpにアクセスできる場合は、次のようなものを使用できます

mysqldump -u [username] -p -t -T/path/to/directory [database] --fields-enclosed-by=\; --fields-terminated-by=,
2
Alekc

MySQL Workbenchがインストールされている場合は、クエリを実行して、結果の上にある[エクスポート]をクリックできます。 .CSVとして保存するオプションが表示されます。

2
John

CLIは、タブで区切られた形式で出力できます。これで十分です(私は経験から話します)。 -Bオプションを使用します。タブ区切りの最大の問題は、Excelでその形式をインポートできないことです。ただし、OpenOfficeにはあります。

1
staticsan

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
Artur Siara

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"

See as pagerを使用しない場合、出力は次のようになります。

"blah":"blah","blah":"blah","blah":"blah"
0
Paul Ericson