2012-08-01 43 views
3

如何在使用加載數據infile時用逗號處理字段?我有這個疑問:加載數據infile,用逗號處理字段

$sql = "LOAD DATA LOCAL INFILE '{$file}' INTO TABLE sales_per_pgs 
     FIELDS TERMINATED BY ',' 
     LINES TERMINATED BY '\n' 
     IGNORE 1 LINES 
     (@user_id, @account_code, @pg_code, @sales_value) 
     SET 
     user_id = @user_id, 
     account_code = @account_code, 
     product_group_code = @pg_code, 
     sales_value = REPLACE(@sales_value, ',', ''), 
     company_id = {$company_id}, 
     year = {$year}, 
     month = {$month}"; 

,並從CSV行看起來是這樣的:

139, pg89898, op89890, 1,000,000.00 

其中1,000,000.00是銷售值....

目前

,什麼是插在我數據庫只是"1

有什麼想法嗎?在先進的感謝...

編輯

用戶下載一個表格樣柱:

user idaccount idpg idsales value

其中前三個欄user idaccount idpg id,已填充並且sales value列爲空,因爲用戶必須手動填寫它...用戶使用MS e Xcel公司這樣做...

完成表格後,他會立即上傳它,在我使用的load data infile命令

回答

6

你的內容真的應該是這樣的:

"139", "pg89898", "op89890", "1,000,000.00" 

然後,你可以添加以下命令:

ENCLOSED BY '"' ESCAPED BY "\\" 

而且你不會有問題。

此外,somethign如果你沒有與任何,段落或串在其中,你可以嘗試:

FIELDS TERMINATED BY ', ' 
+0

完美!謝謝你,還有其他人! :d – Mico 2012-08-03 11:27:08

1

你將不得不改變正被輸入CSV文件或改變生成輸出CSV文件 - 聽起來是一樣的,但事實並非如此。

您可以通過封裝領域引號修改過來的數據,並使其認識到字段封裝與他們使用像ENCLOSED BY '"'

命令改變你的輸出,以更新您的命令它將數字格式設置爲1000000而不是1,000,000

0

在CSV中,逗號分隔「列」。由於您的上一個值是1,000,000.00,因此它被視爲3個不同的列,而不僅僅是一個(按預期)。

您可以通過刪除逗號(,)來引用每個值(列)或更改數字格式。

0

,如果你的整個文件是正是爲你寫的,那麼也許你可以使用fields terminated by ', '(逗號+空格),當且僅當你沒有任何個人價值內的字符串。如果您使用的是Linux(或者其他任何類似Unix的系統)和你的字段分隔符是逗號+空格,你可以使用sed用別的東西來代替這個分離器:

sed 's/, /|/g' myfile.csv > myfile.txt 

不過,我會建議那些已經被說:修改你的輸入文件,用引號或雙引號括住每個值,並使用fields terminated by ',' optionally enclosed by '"'

請記住,您的字段終止字符必須是唯一的,並且不得包含在任何單個值中。

0

作爲一種變通方法,嘗試這一個 -

LOAD DATA INFILE 
... 
FIELDS TERMINATED BY ', ' 
...