2016-05-03 5 views
0

Я пытаюсь сделать экспорт csv должным образом в свою тестовую папку с переменным именем файла - я приближаюсь, но я думаю, что у меня есть . это до одной проблемы, прежде чем он работает Вот код до сих пор:MySQL: ДОПОЛНИТЕЛЬНО ЗАВЕРШЕНА '' 'Нарушение INTO OUTFILE Имя переменной

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 запутывается.

Есть ли другой способ сделать это?

ответ

1

Try:

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`; 
+0

Я думаю, что это сделал, спасибо! Не могли бы вы объяснить, что вы сделали, я понял? Похоже, у них было много общего с этим. – Ryan

+0

Потому что, если я добавляю заголовки столбцов или условия, где мне нужно использовать одну кавычку, тогда он разбивается так же, как и до – Ryan

+1

@Ryan: Check [10.1.1 String Literals :: Table 10.1 Special Character Escape Sequences] (http: //dev.mysql.com/doc/refman/5.7/en/string-literals.html#character-escape-sequences). – wchiquito