mysq - использовать переменную (дату), когда SELECT * INTO OUTFILE (по имени файла)

Добрый день,

Я использую INTO OUTFILE для создания файла CSV с информацией о SELECT. Мне нужно использовать переменные, чтобы персонализировать имя CSV.

Например, я хочу добавить дату СЕЙЧАС ().

Это идея (но она не работает):

SET @outpath = "out/";
SET @outfile = (SELECT NOW());
SET @outextension = "_EMAIL_WithoutEmail.csv";
SET @outfull = CONCAT(@outpath,@outfile,@outextension);
SELECT *
    FROM `vn_db_tmp`
    INTO OUTFILE @outfull
    FIELDS TERMINATED BY ';'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n';

Кто-нибудь знает, возможно ли это? Спасибо

3 ответа

Решение

Одним из вариантов является использование 13.5 подготовленного синтаксиса операторов SQL.

Пример:

...

SET @`outfull` := CONCAT('out/', NOW(), '_EMAIL_WithoutEmail.csv');    
SET @`qry` := CONCAT('SELECT * 
                        INTO OUTFILE \'', @`outfull`, '\' 
                        FIELDS TERMINATED BY \';\' 
                        ENCLOSED BY \'"\' 
                        LINES TERMINATED BY \'\n\' 
                      FROM `vn_db_tmp`');    
PREPARE `stmt` FROM @`qry`;
SET @`qry` := NULL;
EXECUTE `stmt`;
DEALLOCATE PREPARE `stmt`;
...

Просто оставь это здесь. Чтобы избежать проблем с выходом файла, вы должны использовать «путь к файлу». используйте обратную косую черту + 'для' специального символа.

      SET @outfull = CONCAT('\'/path/to/file/', date_format (NOW(),'%Y-%m-%d_%H:%i:%s'), '_app.log\'');    
SET @SQL = CONCAT("SELECT * FROM some_table INTO OUTFILE ",@outfull);    
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Единственный способ сделать это - использовать ПОДГОТОВИТЕЛЬНОЕ ЗАЯВЛЕНИЕ

// You can set your VARS or use it direcly in the CONCAT
SET @outpath = "out/";
SET @outfile = (SELECT NOW());
SET @outextension = "_EMAIL_WithoutEmail.csv";

// GENERATE your QUERY with CONCAT into @SQL
SELECT CONCAT("SELECT * FROM `vn_db_tmp` INTO OUTFILE ",@outpath,@outfile,@outextension,'....') INTO @SQL;
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Другие вопросы по тегам