我有一个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文件中的数据一起进入? 还是使用数据表/数据集?
提前谢谢你..
答案 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);
希望它有所帮助!您可以在文档页面上阅读更多内容。