如何以CSV格式输出MySQL查询结果?

How can I output MySQL query results in CSV format?(如何以CSV格式输出MySQL查询结果?)
本文介绍了如何以CSV格式输出MySQL查询结果?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

是否有一种简单的方法可以从 Linux 命令行运行 MySQL 查询并将结果输出到 CSV 格式?

Is there an easy way to run a MySQL query from the Linux command line and output the results in CSV format?

这是我现在正在做的事情:

Here's what I'm doing now:

mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/        /,/g' | tee list.csv
select id, concat("\"",name,"\"") as name
from students
EOQ

如果有很多列需要用引号括起来,或者结果中有引号需要转义,就会变得很乱.

It gets messy when there are a lot of columns that need to be surrounded by quotes, or if there are quotes in the results that need to be escaped.

推荐答案

这是一个相当粗糙的方法[1]:

Here's a fairly gnarly way of doing it[1]:

mysql --user=wibble --password wobble -B -e "select * from vehicle_categories;";|sed "s/'/'/;s/\t/","/g;s/^/"/;s/$/"/;s/\n//g";>Vehicle_categories.csv

效果很好.不过,正则表达式再次证明是只写的.

It works pretty well. Once again, though, a regular expression proves write-only.

正则表达式解释:

  • s///表示将第一个//之间的内容替换为第二个//之间的内容//
  • g"最后是一个修饰符,意思是所有实例,而不仅仅是第一个"
  • ^(在此上下文中)表示行的开头
  • $(在此上下文中)表示行结束

所以,把它们放在一起:

So, putting it all together:

s/'/\'/          Replace ' with \'
s/\t/\",\"/g     Replace all \t (tab) with ","
s/^/\"/          at the beginning of the line place a "
s/$/\"/          At the end of the line, place a "
s/\n//g          Replace all \n (newline) with nothing

[1] 我在某处找到了它,不能相信任何功劳.

这篇关于如何以CSV格式输出MySQL查询结果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

ibtmp1是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_path参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12M:autoextend,也就是说在文件系统磁盘足够的情况下,这个文件大小是可以无限增长的。 为了避免ibtmp1文件无止境的暴涨导致
What does SQL clause quot;GROUP BY 1quot; mean?(SQL 子句“GROUP BY 1是什么意思?意思是?)
MySQL groupwise MAX() returns unexpected results(MySQL groupwise MAX() 返回意外结果)
MySQL SELECT most frequent by group(MySQL SELECT 按组最频繁)
Why Mysql#39;s Group By and Oracle#39;s Group by behaviours are different(为什么 Mysql 的 Group By 和 Oracle 的 Group by 行为不同)
MySQL GROUP BY DateTime +/- 3 seconds(MySQL GROUP BY DateTime +/- 3 秒)