繁体   English   中英

在 INTO OUTFILE 中使用 concat() 给我错误代码 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM