csv将数据加载到mysql中,其中包含不匹配和跳过的列

oxiaedzo  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(408)

我正在尝试将数据从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,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错误:将数据infle'd:/website/finance/csv/abndx.csv'加载到表中 mutual_fund_history 以“”结尾的字段,“”以“”结尾的行忽略1行(@date\u str,@open,@high,@low,@close,@adjclose,@volume)集 date =str_to_date(@date_str,'%c/%e/%y'),set symbol=abndx,set nav=@close;sql错误#:1064-您的sql语法有错误;查看与mysql服务器版本相对应的手册,在第8行的“set symbol=abndx,set nav=@close”附近使用正确的语法…
我被绊倒了。谢谢你的帮助。
更新:我尝试在“$symbol”周围加单引号,因为它是一个字符串,但仍然出现错误。
注意,我跟随这篇文章来指导我。

jdg4fx2g

jdg4fx2g1#

好的,是从那个帖子上得到的。只能使用一个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;

相关问题