![](/img/trans.png)
[英]MYSQL: Using column name in CONCAT() function gives syntax error 1064
[英]Using concat() in INTO OUTFILE gives me error code 1064
我正在尝试执行查询并将其结果导出到一个 csv 文件,其文件名中带有格式化的current_timestamp
。
INTO OUTFILE
及以后)执行得很好。INTO OUTFILE
它可以很好地导出到 csv,即制作INTO OUTFILE 'C:\\path\\to\\file.csv'
。SELECT CONCAT(..)
函数及其参数,我会返回一个正面的字符串,所以我知道 concat 函数很好,它生成C:\\ProgramData\\MySQL\\MySQL Server 5.6\\Uploads\\2020-10-20_043918.csv
。 我觉得INTO OUTFILE
除了一个简单的字符串之外别无他求,但希望我错了。 有没有人对此有任何见解?
SELECT
COUNT(*) AS AgentCount,
clients.ClientId,
clients.Name AS ClientName,
computers.RouterAddress
FROM
computers
LEFT JOIN
clients
ON
computers.ClientId = clients.ClientId
GROUP BY
computers.RouterAddress
ORDER BY
AgentCount DESC
INTO OUTFILE
CONCAT('C:\\ProgramData\\MySQL\\MySQL Server 5.6\\Uploads\\', DATE_FORMAT(CURRENT_TIMESTAMP, '%Y-%m-%d_%H%i%s'), '.csv')
FIELDS TERMINATED BY
','
ENCLOSED BY
'"'
LINES TERMINATED BY
'\r\n'
select ... into outfile
不支持变量,正如您所发现的。 您所要求的需要动态 SQL:
SET @sql = CONCAT_WS('\r\n',
'SELECT',
' COUNT(*) AS AgentCount,',
' clients.ClientId,',
' clients.Name AS ClientName,',
' computers.RouterAddress',
'FROM',
' computers',
'LEFT JOIN',
' clients',
'ON',
' computers.ClientId = clients.ClientId',
'GROUP BY',
' computers.RouterAddress',
'ORDER BY',
' AgentCount DESC',
CONCAT('INTO OUTFILE \'', TRIM(BOTH '\'' FROM QUOTE(@@secure_file_priv)), DATE_FORMAT(CURRENT_TIMESTAMP, '%Y-%m-%d_%H%i%s'), '.csv\''),
'FIELDS TERMINATED BY \',\'',
'ENCLOSED BY \'\"\'',
'LINES TERMINATED BY \'\\r\\n\'');
PREPARE statement FROM @sql;
EXECUTE statement;
DEALLOCATE PREPARE statement;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.