【问题标题】:CSV Load Data into mySQL with mismatched and skipped columnsCSV 使用不匹配和跳过的列将数据加载到 mySQL
【发布时间】:2018-11-25 05:07:12
【问题描述】:

我正在尝试将数据从 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 错误: LOAD DATA INFILE 'D:/Website/finance/csv/ABDNX.csv' INTO 表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 符号 = 附近使用正确的语法 ABNDX, SET nav = @close' 在第 8 行…

我被难住了。感谢您的帮助。

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

注意,我已关注this post 指导我。

【问题讨论】:

    标签: mysql csv bulk-load


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-09-14
      • 2015-06-08
      • 2014-11-02
      • 1970-01-01
      • 2017-04-19
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      相关资源
      最近更新 更多