2014-09-01 40 views
1

我想CSV文件导入到数据库中进口日期

ID,姓名,日期1,日期2

数据 10001,鲍勃·罗伯茨,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' 

我试过很多东西,但没有任何工程。我想这个问题是由时间毫秒和字符串末尾有一个点而不是冒号的事实给出的。

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

你能帮我请

感谢

+0

MySQL的日期时间格式看起来更像是“2014年9月1日00:00:00”,有没有什么可以转换的字符串的方式从CSV中匹配的方式在? – durbnpoisn 2014-09-01 16:59:23

+0

如果你在excel上加载它,你可以轻松地将日期格式更改为MySQL接受的格式,并在完成后再次将其重新导出到CSV。 – Prix 2014-09-01 17:04:18

+0

如何在excel中打开2000万行数据集? – QGA 2014-09-01 17:05:53

回答

0

我有这个问题上发挥了一下,我解决了它转换我的日期与awk脚本和升级MySQL 5.6版支持毫秒

还是要谢谢你

+1

很酷。现在,如果您将您的或其他答案标记为已接受的答案,您将使此帖更具相关性:-) – 2014-09-03 13:13:57

+0

我需要等待7个小时才能接受我的答案 – QGA 2014-09-03 13:15:20

+0

哦,我不知道。感谢通知。 – 2014-09-03 13:20:59

1

我会建议你将数据导入到一个临时表,其中所有列都是字符串(比如varchar(255),然后在MySQL中进行类型转换到最终形式,这样可以更容易地调试代码并找出你需要的确切转换方式

你将可以使用str_to_date()来做转换。

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/

如果你想一步做这个转换,不希望使用使得w orkaround,您将需要直接使用“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