我正在尝试使用mysql命令行工具以逗号分隔格式输出查询结果。我的mysql用户无权使用此问题中引用的“INTO OUTFILE”选项:
How to output MySQL query results in CSV format?
我也知道分别在html和xml中格式化输出的-H和-X选项,但是没有办法直接将csv格式输出到屏幕上吗?
我发现这个方法使用sed - http://tlug.dnho.net/?q=node/209。但是,我很想找到一个直接的mysql解决方案。
有什么想法吗?
答案 0 :(得分:16)
我最终只是将制表符分隔的输出复制并粘贴到电子表格,然后将其导出到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;
答案 1 :(得分:4)
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.
如果你需要引用一个ouput字段,让我们说$ 1,你的awk打印将如下所示:
awk -F\\t '{print "\""$1"\","$2","$3}'
答案 2 :(得分:3)
我已经使用MySQL多年了,除了您已经找到的解决方案之外,我不知道有任何方法可以单独使用mysql
命令行客户端来生成CSV输出。 / p>
文件中有一些功能请求支持CSV输出:
我建议的唯一其他解决方案是在Perl或PHP中编写脚本,从MySQL获取数据并以CSV格式或任何其他格式输出。这不是一个难以写的脚本。
答案 3 :(得分:3)
将答案传递给tr
,如下所示:
mysql <blah blah> -B | tr '\t' ','
答案 4 :(得分:2)
如果安装了MySQL Workbench,则可以运行查询,然后单击结果上方的“导出”。它将为您提供保存为.CSV的选项。
答案 5 :(得分:1)
如果你有权访问mysqldump,你可以使用这样的东西
mysqldump -u [username] -p -t -T/path/to/directory [database] --fields-enclosed-by=\; --fields-terminated-by=,
答案 6 :(得分:1)
CLI可以以制表符分隔的格式输出,这几乎足够好(我从经验中说)。使用-B选项。制表符分隔的最大问题是我无法使Excel导入该格式。但是,OpenOffice可以。
答案 7 :(得分:1)
关注Change output format for MySQL command line results to 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 :(得分:0)
如果您以交互方式使用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作为寻呼机,则输出如下:
"blah":"blah","blah":"blah","blah":"blah"