【问题标题】:MySQL: OPTIONALLY ENCLOSED BY '"' Breaking INTO OUTFILE Variable NameMySQL:可选地由'"' 封闭进入 OUTFILE 变量名
【发布时间】:2016-05-03 17:45:52
【问题描述】:

我一直在尝试使用可变文件名将 csv 正确导出到我的测试文件夹中——我快要接近了,但我认为在它起作用之前我已经把它归结为一个问题。到目前为止的代码如下:

SET @q1 := CONCAT(
"SELECT *
FROM table
INTO OUTFILE '/SQLOut/test"
, DATE_FORMAT(NOW(),'%Y%m%d')
,".csv'"
, "FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'");

PREPARE s1 FROM @q1;
EXECUTE s1;
DROP PREPARE s1;

如您所见,我必须使用prepared statements 才能使文件名包含今天的日期。这部分有效——但如果我想把它变成一个 csv,我需要在之后包含“字段终止”的东西,我认为这是破坏它的原因。

我相信如果OPTIONALLY ENCLOSED BY '"' 不包含" 后的双引号将关闭我原来的"CONCAT('LINES TERMINATED BY '\n'"); 的最后一行之后,这将按预期运行切断,MySQL 变得混乱。

还有其他方法吗?

【问题讨论】:

    标签: mysql macos csv into-outfile


    【解决方案1】:

    试试:

    SET @`qry` := CONCAT('
       SELECT *
       FROM `table`
       INTO OUTFILE \'/SQLOut/test', DATE_FORMAT(NOW(), '%Y%m%d'), '.csv\'
       FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'"\'
       LINES TERMINATED BY \'\\n\'
    ');
    
    PREPARE `stmt` FROM @`qry`;
    EXECUTE `stmt`;
    DROP PREPARE `stmt`;
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2020-11-27
    • 2018-06-12
    • 2011-10-13
    • 2014-12-04
    • 1970-01-01
    相关资源
    最近更新 更多