MySQL中的日期时间转换

问题描述 投票:1回答:3

我将一个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;

样本数据:

enter image description here

更多样本数据:

enter image description here

我现在已经尝试了一个多小时了。有人可以帮忙吗?

mysql sql datetime
3个回答
1
投票

根据您的示例数据,STR_TO_DATE的正确格式字符串是

%c/%e/%Y %k:%i
  • %c允许单个数字月份数字
  • %e允许单位数字日数
  • %Y四位数年
  • %k允许一位数小时
  • %i两位数分钟

所有格式字符串都在DATE_FORMAT的手册中描述。

Demo on dbfiddle


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

您可以将qazxsw poi和qazxsw poi列定义为qazxsw poi数据类型,只需执行以下操作:

StartDate

注意:如果您不使用EndDate ...我仍然建议您迁移代码以使用它。这是在MySQL中执行此操作的正确方法,它适用于所有客户端....而且速度非常快(请参阅datetime)。


0
投票

快速入侵如下:

  1. 在Excel中打开CSV文件
  2. 选择日期列
  3. 使用单元格格式弹出窗口将日期格式更改为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') ;
  4. 保存存档
  5. 导入MySQL

这是你不需要以文本形式导入然后尝试将数据转换为LOAD DATA INFILE

© www.soinside.com 2019 - 2024. All rights reserved.