LOAD DATA INFILE(* .csv) - 忽略空单元格

时间:2011-02-09 09:12:05

标签: sql csv ignore load-data-infile

我即将将一个大型(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>,
        ...
    );

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

  

错误代码:1366错误的整数值:''表示行

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

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

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

谢谢!

[编辑] 解决方案是:

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
;

2 个答案:

答案 0 :(得分:4)

像这样添加SET COLUMN:

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

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

答案 1 :(得分:0)

这个答案最初是由@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
;