我正在使用使用句點'。'的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?
下的NULL,我會去相同的替代方法。加載之後,我要做的第一件事就是對所有僞空值進行更新,並將其變爲真實的空值,並與決定''的人進行認真的轉換。應該和null一樣。 – 2012-04-05 03:32:17
謝謝,我確實考慮過在導入所有數據後運行UPDATE - 但是接下來我將不得不導入權重列作爲字符字段(因爲存在'。')。如果想要在權重列上使用MAX或MIN等函數,那將是不理想的。或者我錯過了什麼? – JConnor 2012-04-05 03:59:45
我不太清楚角色字段的來源。如果您可以在該列上運行更新,只需先更新它,然後在沒有任何解決方法的情況下加載數據。如果您不允許在該列上運行更新,並且需要針對該問題的快速(骯髒)解決方案,只需將其加載到您的查詢中,然後嘗試獲取運行更新的權限即可。 – 2012-04-05 04:11:33