首页 文章

如何以csv格式输出MySQL查询结果(到屏幕,而不是文件)?

提问于
浏览
24

我正在尝试使用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解决方案 .

有任何想法吗?

9 回答

  • 3

    CLI可以以制表符分隔的格式输出,这几乎足够好(我从经验中说) . 使用-B选项 . 制表符分隔的最大问题是我无法使Excel导入该格式 . 但是,OpenOffice确实如此 .

  • 4

    关注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"}}}'
    
  • 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表;

  • 0
    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

    我知道如何使用 mysql 命令行客户端单独生成CSV输出,除了你已经找到的解决方案 .

    文件中存在一些用于CSV输出支持的功能请求:

    我建议的唯一其他解决方案是在Perl或PHP中编写脚本,从MySQL获取数据并以CSV格式或任何其他格式输出 . 这不是一个难以编写的脚本 .

  • 16

    将答案传递给 tr ,如下所示:

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

    如果安装了MySQL Workbench,则可以运行查询,然后单击结果上方的“导出” . 它将为您提供保存为.CSV的选项 .

  • 1

    如果你有权访问mysqldump,你可以使用这样的东西

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

    如果您以交互方式使用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"
    

相关问题