CSV通过不匹配和跳过的列将数据加载到MySQL中

时间:2018-11-25 05:07:13

标签: mysql csv bulk-load

我正在尝试将csv中的数据加载到mySQL中。列的顺序不正确,有些被跳过。日期格式也不正确

数据如下:

  

日期,打开,高,低,关闭,调整关闭,交易量   2006年4月3日,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'到   表mutual_fund_history的字段以','结尾   BY''忽略1行(@ date_str,@ open,@ high,@ low,@ close,   @ adjclose,@ volume)SET date = STR_TO_DATE(@date_str,'%c /%e /%Y'),   SET符号= ABNDX,SET导航= @close; SQL错误#:1064-您有一个   您的SQL语法错误;检查与您的手册相对应的手册   MySQL服务器版本,可在'SET symbol =附近使用正确的语法   ABNDX,在第8行设置SET nav = @close'

我脚。感谢您的帮助。

更新:我尝试将单引号放在$ symbol周围,因为它是一个字符串,但仍然会出现错误。

请注意,我已按照this post进行指导。

1 个答案:

答案 0 :(得分:0)

好吧,是从那篇文章中得到的。只能使用一个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;