2012-01-31 48 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);

希望它能帮助!您可以在文档页面阅读更多内容。