2011-02-09 192 views
1

我即将将大型(500 MB)* .csv文件导入到MySQL数据库。LOAD DATA INFILE(* .csv) - 忽略空单元格

我就认为:

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-file;我正在寻找一个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 
; 

回答

3

添加组列像这样:

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

需要与处理该“空间中的表达式替换@ var1的/ 100 '并转换为-Infinity或0或42 ...不确定..

+0

谢谢! 它的工作!我在手册中看到了这一部分,但我可以在你的解释中正确地做到这一点 – speendo 2011-02-09 09:57:28