我正在尝试使用mysql命令行工具以逗号分隔的格式输出查询结果。我的mysql用户无法使用此问题中引用的“INTO OUTFILE”选项。
我也知道使用-H和-X选项将输出格式化为html和xml,但是有没有直接将csv格式输出到屏幕的方法?
我发现了这个使用sed的方法-http://tlug.dnho.net/?q=node/209。但是,我很想找到一个直接的mysql解决方案。
有什么想法吗?
我正在尝试使用mysql命令行工具以逗号分隔的格式输出查询结果。我的mysql用户无法使用此问题中引用的“INTO OUTFILE”选项。
我也知道使用-H和-X选项将输出格式化为html和xml,但是有没有直接将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
从表中选择CONCAT_WS(',', field1, field2, field3)。
tr
,就像这样:mysql <blah blah> -B | tr '\t' ','
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.
awk -F\\t '{print "\""$1"\","$2","$3}'
我使用MySQL已经多年了,我不知道是否有任何方法可以使用mysql
命令行客户端单独生成CSV输出,除了你已经找到的解决方案。
目前已有一些关于支持CSV输出的功能请求已被记录:
我建议的另一种解决方案是使用Perl或PHP编写脚本,从MySQL中获取数据并以CSV格式或任何其他格式输出。这不是一个难写的脚本。mysqldump -u [username] -p -t -T/path/to/directory [database] --fields-enclosed-by=\; --fields-terminated-by=,
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 -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"
CLI 可以输出制表符分隔的格式,这几乎足够好(我是从经验中说的)。使用 -B 选项。制表符分隔的最大问题是我无法让 Excel 导入该格式。但是,OpenOffice 可以。
CONCAT_WS()
函数,因为它会跳过NULL
值(导致列数不均匀)。您可能需要使用类似于IFNULL(column, '')
的东西来避免这个问题。 - Marco Roy