2011-02-09 386 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