Загрузка данных CSV в mySQL с несовпадающими и пропущенными столбцами - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь загрузить данные из csv в mySQL.Столбцы расположены не в правильном порядке, а некоторые пропущены.Даты также имеют неправильный формат

Данные выглядят следующим образом:

Дата, открытие, максимум, минимум, закрытие, настройка закрытия, том 4/3 / 2006,10.01,10.01, 10.01,10.01,7.236886,0 4/4 / 2006,10.07,10.07,10.07,10.07,7.280261,0

Мой код выглядит следующим образом:

$query = <<<eof
    LOAD DATA INFILE '$filename'
      INTO TABLE `$table`
      FIELDS TERMINATED BY ','
      LINES TERMINATED BY '\r\n'    
      IGNORE 1 LINES
      (@date_str, @open, @high, @low, @close, @adjclose, @volume)
      SET `date` = STR_TO_DATE(@date_str, '%c/%e/%Y'),
      SET symbol = $symbol,
      SET nav = @close; 
eof;

Я получаю следующую ошибку:

Ошибка Sql: ЗАГРУЗИТЬ ИНФИЛЬ ДАННЫХ 'D: /Website/finance/csv/ABNDX.csv' INTO TABLE mutual_fund_history ЗАКЛЮЧЕНО ПОЛЯМИ ',' ПРЕКРАЩЕНЫ ЛИНИИBY '' IGNORE 1 LINES (@date_str, @open, @high, @low, @close, @adjclose, @volume) SET date = STR_TO_DATE (@date_str, '% c /% e /% Y'),Символ SET = ABNDX, SET nav = @close;Ошибка Sql #: 1064 - у вас есть ошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'SET symbol = ABNDX, SET nav = @close' в строке 8…

Я запутался.Спасибо за вашу помощь.

Обновление: я пытался поместить одинарные кавычки вокруг символа $, так как это строка, но все равно получаю ошибку.

Обратите внимание, я следовал этот пост , чтобы вести меня.

1 Ответ

0 голосов
/ 25 ноября 2018

Хорошо, получил это от того поста.Можно использовать только один оператор SET, а различные переменные должны быть разделены запятыми, поэтому это должно быть:

$query = <<<eof
    LOAD DATA INFILE '$filename'
     INTO TABLE `$table`
     FIELDS TERMINATED BY ','
     LINES TERMINATED BY '\r\n'    
     IGNORE 1 LINES
     (@date_str, @open, @high, @low, @close, @adjclose, @volume)
     SET `date` = STR_TO_DATE(@date_str, '%c/%e/%Y'),
      symbol = '$symbol',
      nav = @close;
eof;
...