使用数据表或只加载数据infile?

时间:2012-01-31 14:13:36

标签: c# mysql datatable

我有一个csv文件,其数据属于此类型...(日期,时间,ID)

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

然后..我想将这些数据存储到表中.. 我读到了LOAD DATA INFILE但是...... 据我所知(不多),LDI 用于当我的csv中的数据列与我的数据库表完全相同时。

但在我的db表中有另一列... 这是状态..

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

此状态基于csv文件中的时间... 我的意思是这里..我可以设置状态,然后存储它 与csv文件中的数据一起进入? 还是使用数据表/数据集?

提前谢谢你..

1 个答案:

答案 0 :(得分: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无法告诉如何匹配输入字段   表格列。

但是,我不确定我是否完全理解你的需要 -

需要1:您是否只想将CSV文件中的3列插入到您的表中而忽略状态列中的内容?如果是,上述内容可以提供帮助。

需要2:您想在状态列中插入值吗?在这种情况下,只需在CSV文件中添加第四列,然后运行LOAD DATA INFILE。

需要3:您想在运行时计算Status列的值吗?在这种情况下使用SET语法。以下文字摘要可能有所帮助:

  

列列表可以包含列名称或用户变量。   使用用户变量,SET子句使您可以执行   在将结果分配给它们之前转换它们的值   列。

     

SET子句中的用户变量可以通过多种方式使用。该   以下示例直接使用第一个输入列作为值   t1.column1,并将第二个输入列分配给用户变量   在用于之前进行分割操作   t1.column2的值:

     

LOAD DATA INFILE'file.txt'INTO表t1(column1,@ var1)SET   column2 = @ var1 / 100;

     

SET子句可用于提供不是从输入文件派生的值。以下语句将column3设置为当前日期和时间:

     

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

     

您也可以通过丢弃输入值   将其分配给用户变量而不将变量分配给a   表格列:

     

LOAD DATA INFILE'file.txt'INTO TABLE t1(column1,@ dad,   column2,@ idy,column3);

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