2

我想将 csv 文件导入数据库

标头 ID、姓名、姓氏、日期 1、日期 2

数据 10001,Bob,Roberts,03/06/2007 15:18:25.10,03/06/2007 15:18:29.19

该文件有数百万行,为了导入它,我使用了以下命令:

mysqlimport  --ignore-lines=1 --fields-terminated-by=, --columns='id,name,surname,date1,date2' --local -u root -p Database /home/server/Desktop/data.csv 

我的问题是,当我尝试导入文件时,日期没有正确存储,它们看起来像这样:

'0000-00-00 00:00:00'

我尝试了很多东西,但没有任何效果。我想问题是由于时间有毫秒并且字符串末尾有一个点而不是冒号。

我的日期存储在时间戳变量中

你能帮我吗

谢谢

4

3 回答 3

2

您的日期不是 MySql 标准格式,即“YYYY-mm-dd HH:MM:SS”。

Mysqlimport 应该能够在命令行参数中接受一些日期转换功能,就像您使用“LOAD DATA”命令(由 mysqlimport 实用程序使用)时所做的那样,但此时它不是:

http://bugs.mysql.com/bug.php?id=55666

这是解决此问题的一些方法:

http://blog.dgaspar.com/2010/08/01/the-set-clause/

如果您想一步完成此转换并且不想使用该解决方法,则需要直接使用“LOAD DATA”命令:

load data infile '/tmp/xxx.dat' 
into table xxx 
fields terminated by '|' 
lines terminated by '\n' 
(col1, 
col2, 
@col3, 
@col4, 
col5) 
set 
col3 = str_to_date(@col3, '%m/%d/%Y'), 
col4 = str_to_date(@col4, '%d/%m/%Y')

我从以下位置获得此代码: http: //dev.mysql.com/doc/refman/5.1/en/load-data.html#c8828

于 2014-09-01T17:16:52.457 回答
1

我建议您将数据导入临时表,其中所有列都是字符串(例如varchar(255)。然后在 MySQL 中将类型转换为最终形式。这将更容易调试代码并找出确切的您需要的转换。

您将能够使用str_to_date()来进行转换。

于 2014-09-01T17:09:15.333 回答
0

我已经解决了这个问题,我解决了它使用 awk 脚本转换我的日期并将 mysql 升级到支持毫秒的版本 5.6

不管怎么说,还是要谢谢你

于 2014-09-03T09:34:12.457 回答