2012-04-05 185 views
3

我正在使用使用句點'。'的CSV文件。標誌來表示空值。例如,有沒有辦法在MySQL中設置代表'n/a'的字符?

item weight unit_price 
1  5.1  10 
2  .   20 
3  7.5  30 
4  .   40 
5  2.0  50 

這是通過使用在MySQL讀入的表(V 5.5):

CREATE TABLE products(
    item SMALLINT NOT NULL, 
    weight float DEFAULT NULL, 
    unit_price SMALLINT); 

LOAD DATA INFILE ".../data.txt" 
IGNORE 
INTO TABLE products 
FIELDS TERMINATED BY "," 
LINES TERMINATED BY "\r\n" 
IGNORE 1 LINES; 

的IGNORE在LOAD DATA塊關鍵字脅迫的 ''到0 - 有沒有辦法,我可以將其設置爲NULL而不是?

我試過唯一的解決方法是這樣的:「」

LOAD DATA INFILE ".../data.txt" 
IGNORE 
INTO TABLE products 
FIELDS TERMINATED BY "," 
LINES TERMINATED BY "\r\n" 
IGNORE 1 LINES 
(item, 
@weight, 
unit_price 
) 
SET 
weight = if(@weight = '.', NULL, @weight); 

但是實際的數據,我用了超過10萬行和15列,其中工作用於表示空值。有沒有更簡潔的方法來默認爲null?

+1

下的NULL,我會去相同的替代方法。加載之後,我要做的第一件事就是對所有僞空值進行更新,並將其變爲真實的空值,並與決定''的人進行認真的轉換。應該和null一樣。 – 2012-04-05 03:32:17

+0

謝謝,我確實考慮過在導入所有數據後運行UPDATE - 但是接下來我將不得不導入權重列作爲字符字段(因爲存在'。')。如果想要在權重列上使用MAX或MIN等函數,那將是不理想的。或者我錯過了什麼? – JConnor 2012-04-05 03:59:45

+1

我不太清楚角色字段的來源。如果您可以在該列上運行更新,只需先更新它,然後在沒有任何解決方法的情況下加載數據。如果您不允許在該列上運行更新,並且需要針對該問題的快速(骯髒)解決方案,只需將其加載到您的查詢中,然後嘗試獲取運行更新的權限即可。 – 2012-04-05 04:11:33

回答

0

在csv中使用查找和替換工具取出。並用「」(沒有)替換,然後當你加載它會自動將該行放在重量列

+0

是的。我不確定其他數據庫系統如何讀取空值,MySQL需要數據文件使用'\ N'來表示空值 – JConnor 2012-04-29 22:32:53

相關問題