简体   繁体   English

在 INTO OUTFILE 中使用 concat() 给我错误代码 1064

[英]Using concat() in INTO OUTFILE gives me error code 1064

I'm trying to execute a query and export its results to a csv file with a formatted current_timestamp in its file name.我正在尝试执行查询并将其结果导出到一个 csv 文件,其文件名中带有格式化的current_timestamp

  • The query itself (excluding from INTO OUTFILE and onwards) executes just fine.查询本身(不包括INTO OUTFILE及以后)执行得很好。
  • If I pass a simple string to INTO OUTFILE it exports to csv just fine ie making INTO OUTFILE 'C:\\path\\to\\file.csv' .如果我将一个简单的字符串传递给INTO OUTFILE它可以很好地导出到 csv,即制作INTO OUTFILE 'C:\\path\\to\\file.csv'
  • If I execute the SELECT CONCAT(..) function and its parameters in another query window, I get a positive looking string returned so I know the concat function is fine, it produces C:\\ProgramData\\MySQL\\MySQL Server 5.6\\Uploads\\2020-10-20_043918.csv .如果我在另一个查询窗口中执行SELECT CONCAT(..)函数及其参数,我会返回一个正面的字符串,所以我知道 concat 函数很好,它生成C:\\ProgramData\\MySQL\\MySQL Server 5.6\\Uploads\\2020-10-20_043918.csv

I feel like INTO OUTFILE annoyingly doesn't expect anything other than a simple string, hopefully I'm wrong though.我觉得INTO OUTFILE除了一个简单的字符串之外别无他求,但希望我错了。 Does anyone have any insight to this?有没有人对此有任何见解?

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 does not support variables, as you are finding out. select ... into outfile不支持变量,正如您所发现的。 What you ask for requires dynamic SQL:您所要求的需要动态 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