【问题标题】:LOAD DATA INFILE (*.csv) - ignore empty cellsLOAD DATA INFILE (*.csv) - 忽略空单元格
【发布时间】:2011-02-09 09:12:05
【问题描述】:

我即将将一个大 (500 MB) *.csv 文件导入 MySQL 数据库。

我就是这样:

LOAD DATA INFILE '<file>'
    REPLACE
    INTO TABLE <table-name>
    FIELDS
        TERMINATED BY ';'
        OPTIONALLY ENCLOSED BY '"'
    IGNORE 1 LINES ( #Header
        <column-name1>,
        <column-name2>,
        ...
    );

我有一个列有问题(它的数据类型是 int) - 我收到一条错误消息:

错误代码:1366 不正确的整数值:行列的“”

我查看了 *.csv 文件中的这一行。导致错误的单元格内部只有一个空格(如下所示:...; ;...)。

如何让 SQL 忽略此列中的空格?

由于 *.csv 文件非常大,之后我必须导入更大的文件,我想避免编辑 *.csv 文件;我正在寻找 SQL 解决方案。

【问题讨论】:

    标签: sql csv load-data-infile


    【解决方案1】:

    像这样添加一个 SET COLUMN:

    LOAD DATA INFILE 'file.txt'
      INTO TABLE t1
      (column1, @var1)
      SET column2 = @var1/100;
    

    您需要将 @var1/100 替换为处理“空格”的表达式并转换为 -Infinity 或 0 或 42...不确定..

    【讨论】:

      【解决方案2】:

      这个答案最初包含在问题中,作为@speendo 的编辑;我已将其转换为正确的答案。


      解决办法是:

      LOAD DATA INFILE '<file>'
          REPLACE
          INTO TABLE <table-name>
          FIELDS
              TERMINATED BY ';'
              OPTIONALLY ENCLOSED BY '"'
          IGNORE 1 LINES ( #Header
              <column-name1>,
              <column-name2>,
              @var1 #the variable that causes the problem
              ...
          )
          SET <column-name-of-problematic-column> = CASE
              WHEN @var1 = ' ' THEN NULL
              ELSE @var1
          END
      ;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-24
        • 1970-01-01
        • 2013-05-26
        • 1970-01-01
        • 2019-01-11
        • 2015-09-16
        • 2012-10-05
        • 2016-07-30
        相关资源
        最近更新 更多