从MySQL到CSV文件的列名称
我有一个数据库中的表,我想用作联系人表导入Outlook。
我想要import的是这样的:
名字| 电子邮件
andy | ds@ds.com < – input姓名和电子邮件
目前我有这样的代码:
(SELECT 'Name', 'Email') union all (select E_Name, Email INTO OUTFILE '/xampp/tmp/Sample.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n' FROM email WHERE 1)
这会创build一个像这样的excel文件:
A | B < – excel列名
名称| 电子邮件
andy | ds@ds.com
我知道如果我拉动信息使用odbc连接它拉信息我需要的方式,但是我想它,所以csv文件已经在这个信息已经创build,从而消除了需要做odbc方法。
我find了解决我的问题。 会打我自己。
SELECT * INTO OUTFILE '/xampp/tmp/Sample.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' FROM ( SELECT 'Name' AS `E_Name`, 'Email' AS `Email` UNION ALL SELECT `E_Name`, `Email` FROM `email` ) `sub_query`
在新线之前,我没有做回报。 一旦我join这个CSV可以导入到Outlook没有问题。 感谢所有的帮助。 病假离开这个开放其他任何人都有同样的问题。
* 脸掌 *
我经常发现这种情况。 我知道的最简单的方法是使用sed
,这是Unix的命令行工具。
由于您正在使用Excel,我假设您没有* nix系统(Linux,BSD等)。 所以我build议你安装Cygwin(你可以在这里find它)。
然后,打开一个Cygwin bash shell并在命令提示符下input:
mysql -h yourHost -u yourUser -pYourPassword yourDatabase -e"select e_name, email from email" | sed 's/\t/,/g' > yourOutput.csv
让我解释一下每一件事情:
-
mysql -h yourHost -u yourUser -pYourPassword yourDatabase -e"select..."
在MySQL中打开会话,连接到yourDatabase
并执行查询(-e
标志用于执行查询)。 默认情况下,输出以制表符分隔值的forms定向到控制台。 - pipe道字符
|
用于将第一个命令的输出redirect到第二个命令,而不是将输出定向到控制台。 -
sed 's/\t/,/g''
用逗号replace每个制表符(\t
) -
> yourOutput.csv
将命令的结果redirect到一个名为yourOutput.csv
的文件。 你可以指定一个path。
有关sed
和redirect的更多信息: http : //lowfatlinux.com
我知道这可能会很麻烦,但是如果你经常这样做的话,这会节省很多时间和头痛(第一次是最困难的,过了一段时间后会变得非常简单)
希望这可以帮助
关于您的评论:
这将需要从MySQL的标题,并在Excel中使用odbc连接的方式将它们标头?
在通俗的术语中:ODBC连接使得客户端程序可以看见表或视图,因此客户端可以使用表或视图中包含的数据。 这意味着,当然,列名是客户端可见的。
我上面提出的解决scheme更像是将select
语句的结果“导出”到文件中。
如果你不想安装Cygwin,我对你有一些消息: >
redirect操作符在Windows的命令窗口中工作…但我不知道用Windows命令行工具来replace字符。 如果你不介意处理选项卡而不是逗号,这将工作:
mysql -h yourHost, -u yourUser -pyourPassword yourDatabase -e"select..." > yourOutputFile.txt
这会将查询结果导出到yourOutputFile.txt
文件中,作为制表符分隔值(可由Excel读取)。 正如我在我的评论中所提到的,如果您使用别名作为您的列名称,这些将是将被导出的列标题。
那么从我的理解INSERT INTO您的查询格式是错误的,因为它只写入输出文件的第二个插入。
试试这个(testing)
SELECT * INTO OUTFILE '/xampp/tmp/Sample.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n' FROM ( SELECT 'Name' AS `E_Name`, 'Email' AS `Email` UNION ALL SELECT `E_Name`, `Email` FROM `email` WHERE 1 ) `sub_query`
注意:不知道为什么你需要WHERE子句,这可能会被取出。 关键是将查询合并到子查询中,然后将其写入文件。