Mysqlコマンドラインツールを使用して、クエリ結果をカンマ区切り形式で出力しようとしています。私のmysqlユーザーには、この質問で参照されている「INTO OUTFILE」オプションを使用するためのアクセス権がありません。
また、出力をhtmlおよびxmlでフォーマットする-Hおよび-Xオプションも認識していますが、csvフォーマットを画面に直接出力する方法はありませんか?
私はsed- http://tlug.dnho.net/?q=node/209 を使用してこのメソッドを見つけました。しかし、私はまっすぐなmysqlソリューションを見つけることに興味があります。
何か案は?
結局、タブ区切りの出力を取り、それをスプレッドシートにコピーして貼り付け、それを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;
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}'
私は何年もMySQLを使用してきましたが、すでに見つけたソリューションを除いて、mysql
コマンドラインクライアントだけを使用してCSV出力を生成する方法を知りません。
CSV出力をサポートするためにファイルにいくつかの機能リクエストがあります:
私が提案する他の唯一の解決策は、PerlまたはPHPでスクリプトを記述し、MySQLからデータをフェッチして、CSV形式またはその他の必要な形式で出力することです。これは、書くのが難しいスクリプトではありません。
次のように、回答をtr
にパイプします。
mysql <blah blah> -B | tr '\t' ','
Mysqldumpにアクセスできる場合は、次のようなものを使用できます
mysqldump -u [username] -p -t -T/path/to/directory [database] --fields-enclosed-by=\; --fields-terminated-by=,
MySQL Workbenchがインストールされている場合は、クエリを実行して、結果の上にある[エクスポート]をクリックできます。 .CSVとして保存するオプションが表示されます。
CLIは、タブで区切られた形式で出力できます。これで十分です(私は経験から話します)。 -Bオプションを使用します。タブ区切りの最大の問題は、Excelでその形式をインポートできないことです。ただし、OpenOfficeにはあります。
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 "} }} '
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"