我将一个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;
样本数据:
更多样本数据:
我现在已经尝试了一个多小时了。有人可以帮忙吗?
根据您的示例数据,STR_TO_DATE
的正确格式字符串是
%c/%e/%Y %k:%i
%c
允许单个数字月份数字%e
允许单位数字日数%Y
四位数年%k
允许一位数小时%i
两位数分钟所有格式字符串都在DATE_FORMAT
的手册中描述。
如果您使用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
您可以将qazxsw poi和qazxsw poi列定义为qazxsw poi数据类型,只需执行以下操作:
StartDate
注意:如果您不使用EndDate
...我仍然建议您迁移代码以使用它。这是在MySQL中执行此操作的正确方法,它适用于所有客户端....而且速度非常快(请参阅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
。