我在数据库中有一个表,我希望将其用作联系人表格以导入Outlook。
我想要导入的是:
名字|电子邮件andy | ds@ds.com< - 输入姓名和电子邮件
目前我有这段代码:
(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)
这会创建一个这样的excel文件:
A | B< - excel列名
姓名|电子邮件
andy | ds@ds.com
我知道如果我使用odbc连接提取信息,它会按照我需要的方式提取信息,但是我想要它,因此csv文件是已经在其中创建的,因此无需执行odbc方法。< / p>
答案 0 :(得分:4)
我找到了解决问题的方法。会拍我自己
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`
在新线之前,我没有做回报。一旦我添加了这个csv可以导入到Outlook没有问题。感谢所有人的帮助。生病离开这个开放的任何人都有同样的问题。
* 面掌 *
答案 1 :(得分:2)
我经常发现这种情况。我所知道的最简单的方法是使用sed
,这是Unix的命令行实用程序。
由于您正在使用Excel,我假设您没有* nix系统(Linux,BSD等)。所以我建议你安装Cygwin(你可以得到它here)。
然后,打开一个Cygwin bash shell并在命令提示符下写下:
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
标志用于执行查询)。默认情况下,输出以制表符分隔值的形式定向到控制台。|
用于将第一个命令的输出重定向到第二个命令,而不是将输出定向到控制台。sed 's/\t/,/g''
用逗号\t
)
> yourOutput.csv
将命令的结果重定向到名为yourOutput.csv
的文件。您可以指定路径。有关sed
和重定向的更多信息:http://lowfatlinux.com
我知道这可能很麻烦,但如果你经常这样做,这将为你节省相当多的时间和头痛(第一次是最难的,过了一段时间后结果非常简单)
希望这有帮助
关于您的评论:
这会从mysql中获取标题,并按照odbc连接的方式在excel中创建标题吗?
在外行术语中:ODBC连接使表或视图对客户端程序可见,因此客户端可以使用表或视图中包含的数据。当然,这意味着列名称对客户端可见。
我上面提出的解决方案更像是将select
语句的结果“导出”到文件中。
如果您不想安装Cygwin,我会收到一些消息:>
重定向操作符适用于Windows的命令窗口...但我不知道Windows命令行实用程序替换字符。如果您不介意使用制表符而不是逗号,则可以使用:
mysql -h yourHost, -u yourUser -pyourPassword yourDatabase -e"select..." > yourOutputFile.txt
这会将查询结果导出到yourOutputFile.txt
文件,作为制表符分隔值(可以由excel读取)。正如我在评论中提到的,如果您为列名使用别名,这些将是要导出的列标题。
答案 2 :(得分:0)
根据我对INSERT INTO的理解,您的查询格式错误,因为它只是将第二个插入内容写入输出文件。
试试这个(测试过)
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子句,这可能会被删除。关键点是在子查询中合并查询,然后将其写入文件。
答案 3 :(得分:0)
下面的查询会在concat组上进行所有合并(以动态获取字段名称)和实际数据。
-- group concat default is 1024, to avoid field names getting truncated we increase this value
SET SESSION group_concat_max_len = 10000;
SELECT
CONCAT('SELECT * INTO OUTFILE \'/home/myuser/myfile.csv\' FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'"\' ESCAPED BY \'\' LINES TERMINATED BY \'\n\' FROM (SELECT ',
GROUP_CONCAT(CONCAT('\'', COLUMN_NAME, '\'')),
' UNION select * from YOUR_TABLE) as tmp')
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'YOUR_TABLE'
AND TABLE_SCHEMA = 'YOUR_SCHEMA'
ORDER BY ORDINAL_POSITION;