2012-01-31 41 views
0

我有一個CSV文件,其數據是在這種類型的...(日期,時間,ID)使用數據表或只是加載數據infile?

20120131, 07:17:40, BK01 
20120131, 07:17:41, BK02 
20120121, 07:50:04, BK05 

then..i想這個數據存儲到一個表.. 我讀到LOAD DATA INFILE但是...... 據我知道(不要太多),LDI 是當我的CSV數據列是我的db表完全一樣..

,但在我的數據庫表有一列。 這是狀態..

20120131, 07:17:40, BK01, STATUSHERE 
20120131, 07:17:41, BK02, ?? 
20120121, 07:50:04, BK05, ?? 

此狀態基於csv文件中的時間... 我的意思是這裏..我可以設置狀態,然後將其與csv文件中的數據一起存儲到 中? 還是通過使用數據表/數據集?

預先感謝您..

+0

不確定你是否已經檢查了我的答案。你玩過LOAD DATA INFILE嗎? – Abhay 2012-02-03 18:08:36

回答

0

LOAD DATA INFILE不需要CSV的列在表中匹配列。您可以在您希望插入值的LOAD DATA INFILE查詢中指定列名稱。下面是從MySQL documentation

文本片段以下示例將persondata表的所有列:

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata;

默認情況下,當在LOAD DATA INFILE 語句末尾沒有提供列列表時,輸入行預計包含每個表 列的字段。如果只想加載表格的某些列,請指定 列列表:

LOAD DATA INFILE'persondata.txt'INTO TABLE persondata (col1,col2,...);

如果輸入文件中的字段順序不同於 表中列的順序,您還必須指定列列表。否則,MySQL無法知道如何將輸入字段與 表列匹配。

但是,我不知道我完全理解你的需要 -

NEED 1:你想在CSV文件中僅插入3列到表忽略什麼進入狀態柱?如果是,上述可以幫助。

需要2:您想將值插入狀態欄嗎?在這種情況下,只需將第四列添加到CSV文件中,然後運行LOAD DATA INFILE。

需要3:您想在運行時計算Status列的值嗎?在這種情況下使用SET語法。以下文本片段可能有所幫助:

列列表可以包含列名或用戶變量。 隨着用戶變量,SET子句允許您分配結果 列前執行它們的值 轉換。

SET子句中的用戶變量可以用幾種方法來使用。以下示例將第一個輸入列直接用於t1.column1的值 ,並將第二個輸入列分配給用戶變量 ,該用戶變量在用於t1.column2的 值之前進行除法運算:

LOAD DATA INFILE 'file.txt的' INTO表T1(列1,@ var1的)SET 列2 = @ var1的/ 100;

SET子句可用於提供沒有從輸入文件導出的值。以下語句將column3設置爲當前日期和時間:

LOAD DATA INFILE'file.txt'INTO TABLE t1(column1,column2)SET column3 = CURRENT_TIMESTAMP;

也可以丟棄由 的輸入值將其分配給一個用戶變量,而不是分配變量爲 表列:

LOAD DATA INFILE「file.txt的」 INTO表T1(列1,@dummy , column2,@dummy,column3);

希望它能幫助!您可以在文檔頁面閱讀更多內容。