我将CSV文件导入了MySQL。 CSV文件包含日期/时间,格式为'mm/dd/yyyy hh:mm'
。
它仅作为文本导入到MySQL中。所以我确实将其导入为文本。然后,我创建了另一个字段,希望将该文本值转换为'mm-dd-yyyy hh:mm'
格式或'YYYY-mm-dd hh:mm'
格式的日期时间。但这行不通。下面是我的代码。
ALTER TABLE table1 ADD COLUMN StartDateNEW DATETIME;
SET SQL_SAFE_UPDATES = 0;
UPDATE table1 SET StartDateNEW = STR_TO_DATE(StartDate, '%m/%e/Y %H:%i');
SET SQL_SAFE_UPDATES = 1;
样本数据:
更多示例数据:
我已经尝试了一个多小时。有人可以帮忙吗?
答案 0 :(得分:1)
根据您的示例数据,STR_TO_DATE
的正确格式字符串为
%c/%e/%Y %k:%i
%c
允许使用一位数的月份数字%e
允许使用一位数字的天数%Y
四位数的年份%k
允许单位位数的小时数%i
两位数分钟手册DATE_FORMAT
中描述了所有格式字符串。
答案 1 :(得分:1)
如果您使用the LOAD DATA INFILE
syntax加载数据,则应该可以即时处理转换。
假设您的源csv文件如下所示:
StartDate, EndDate, Value
"1/10/2012 10:05", "1/11/2012 11:51", abc
"1/13/2012 08:00", "1/15/2012 09:01", abc
您可以将列StartDate
和EndDate
定义为datetime
数据类型,只需执行以下操作:
LOAD DATA INFILE '/path/to/my/file.csv' INTO TABLE mytable
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n' -- or '\n'
IGNORE 1 LINES
(@StartDate, @EndDate, Value)
SET
StartDate = STR_TO_DATE(@StartDate, '%c/%e/%Y %k:%i'),
EndDate = STR_TO_DATE(@EndDate, '%c/%e/%Y %k:%i')
;
注意:如果您当前不使用LOAD DATA INFILE
...,我仍然建议您迁移代码以使用它。这是在MySQL中执行此操作的正确方法,它适用于所有客户端...。而且速度非常快(请参见this link)。
答案 2 :(得分:0)
快速破解如下:
yyyy-mm-dd
这是您不需要以文本形式导入,然后尝试将数据转换为DateTime
。