我一直在试图从.csv文件导入日期时间值的墙上撞到我的头.
这是import语句.
LOAD DATA LOCAL INFILE 'myData.csv'
INTO TABLE equity_last_import
FIELDS 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'之外,我尝试了几种不同的日期格式,我总是得到一个null datetime [0000-00-00 00:00:00].我也尝试过不使用STR_TO_DATE(),因为字符串是默认的MySQL日期时间格式.
任何帮助将不胜感激.
Asa*_*aph 15
数据文件中的日期已经采用MySQL本身应该理解的格式.它只是用双引号括起来的.你需要告诉LOAD DATA INFILE如何处理报价.尝试这样的事情:
LOAD DATA LOCAL INFILE 'myData.csv'
INTO TABLE equity_last_import
FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY ','
LINES TERMINATED BY '\n'
(equity,last,last_date)
Run Code Online (Sandbox Code Playgroud)
既然你说它不起作用,我创建了一个测试表并验证它确实有效.这是证明:
我已经从问题中突出显示了你的csv数据并粘贴到myData.csv我系统/tmp文件夹中调用的新文件中.然后我连接到mysql控制台,切换到test数据库并运行以下命令:
mysql> create table equity_last_import (equity int, last decimal(10,2), last_date datetime) engine=innodb;
Query OK, 0 rows affected (0.02 sec)
mysql> LOAD DATA LOCAL INFILE '/tmp/myData.csv'
-> INTO TABLE equity_last_import
-> FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY ','
-> LINES TERMINATED BY '\n'
-> (equity,last,last_date);
Query OK, 10 rows affected (0.00 sec)
Records: 10 Deleted: 0 Skipped: 0 Warnings: 0
mysql> select * from equity_last_import;
+--------+--------+---------------------+
| equity | last | last_date |
+--------+--------+---------------------+
| 4108 | 48.74 | 2013-09-16 16:15:04 |
| 4249 | 8.10 | 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 |
+--------+--------+---------------------+
10 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
看到?它完美地运作.
您已指定现在收到以下错误:
Out of range value for column 'last_date' at row 1
Run Code Online (Sandbox Code Playgroud)
您的CSV文件是否有标题?如果是的话,你可能要添加IGNORE 1 LINES到您的LOAD DATA INFILE命令告诉MySQL头跳过.
小智 10
我遇到了这个问题.我通过更改csv文件中日期列的格式来修复它,以匹配MySQL日期时间格式.在Excel中打开,突出显示列,右键单击,单击"设置单元格格式".然后选择Custom并在Type字段中使用"yyyy/mm/dd hh:mm:ss"(无引号),然后单击ok.我更改格式后导入了我的日期.