我一直在努力从. csv文件中导入日期时间值,这让我头疼不已。
下面是import语句。LOAD DATA LOCAL INFILE 'myData.csv' INTO TABLE
equity_last_importFIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (equity,last,@last_date) SET last_date = STR_TO_DATE( @last_date, '%Y-%m-%d %H:%i:%s')
下面是一个数据样本:
4108,48.74,"2013-09-16 16:15:04"
4249,8.1,"2013-09-16 16:15:04"
4197,3.81,"2013-09-16 17:20:00"
4139,26.81,"2013-09-16 16:15:04"
4218,24.83,"2013-09-16 17:20:00"
4260,79.72,"2013-09-16 16:15:04"
4270,450.12,"2013-09-16 17:20:00"
4242,30.38,"2013-09-16 16:15:04"
4193,1.42,"2013-09-16 16:15:04"
4134,3.77,"2013-09-16 16:15:04"
我可以使用STR_TO_DATE()
导入日期值,但无法获取要导入的日期时间值。我尝试了" %Y- % m- % d %H:% i:% s"以外的几种不同日期格式,但总是得到空日期时间[0000 - 00 - 00 00:00:00]。我还尝试不使用STR_TO_DATE()
,因为字符串采用默认MySQL日期时间格式。
任何帮助都将不胜感激。
5条答案
按热度按时间eufgjt7s1#
我遇到了同样的问题。我通过更改CSV文件中日期列的格式以匹配MySQL日期时间格式来修复它。
1.在Excel中打开CSV。
1.突出显示该列。
1.右键单击该列。
1.单击
Format Cells
。1.选择
Custom
。1.在
Type
字段中使用yyyy/mm/dd hh:mm:ss
。1.单击
ok
我的CSV成功导入后,我改变了日期时间格式如上。
dfty9e192#
数据文件中的日期已经是MySQL本机应该理解的格式,它只是用双引号括起来,你需要告诉
LOAD DATA INFILE
如何处理引号,试试这样:更新:
既然你说它不起作用,我就创建了一个测试表来验证它是否起作用。证据如下:
我把问题中的csv数据高亮显示,并粘贴到我系统的
/tmp
文件夹中一个名为myData.csv
的新文件中,然后连接到mysql控制台,切换到test
数据库并运行以下命令:看到了吗,效果很好.
另一项更新:
您已指定现在将收到以下错误:
您的CSV文件有头文件吗?如果有,您可能需要在
LOAD DATA INFILE
命令中添加IGNORE 1 LINES
,以通知MySQL跳过头文件。hfyxw5xn3#
拉我的头发了,这也是因为我没有在上述建议的方式进口。
解决方法:在导入表中创建了一个类型为“VARCHAR”的临时字段temp_date,并且加载数据时没有问题。然后我就可以对类型为date的date列执行更新。
30byixjq4#
我也有同样的问题,这是我的发现,我想它可能会帮助你
该问题与GMT冲突有关:我提取.csv文件的数据库是在GMT 00:00,所以没有夏令时。
我的本地服务器(也就是我试图插入.csv文件的服务器)默认运行在我的计算机(系统)GMT上,在我的情况下是GMT -3,这是受夏令时影响的。
SQL有一种特殊的方法来处理夏令时,它忽略了夏令时开始的确切日期和时间。在我的例子中,那是10月20日,服务器根本无法识别那一天00到凌晨1点之间的所有记录,即使格式是正确的,因为它们根本“不存在”(查看这里的更多信息)。这影响了所有的时间戳记录,而不仅仅是夏令时的细节。
我的解决方案是将本地服务器设置为GMT +00,然后使用以下命令创建新表并导入.csv
然后当我导入.csv文件时,所有的记录都被正确读取。我想如果你将时区设置为等于生成.csv文件的时区,应该可以工作!
vcudknz35#
在Excel中打开CSV。突出显示该列。右键单击该列。单击“格式化单元格”。选择“自定义”。使用与SQL日期格式相同的格式yyyy-mm-dd单击“确定”并保存它对我来说工作正常