MySQL中的日期时间转换

时间:2019-03-03 02:21:09

标签: mysql sql datetime

我将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

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

3 个答案:

答案 0 :(得分:1)

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

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

手册DATE_FORMAT中描述了所有格式字符串。

Demo on dbfiddle

答案 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

您可以将列StartDateEndDate定义为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)

快速破解如下:

  1. 在Excel中打开CSV文件
  2. 选择日期列
  3. 使用单元格格式弹出窗口将日期格式更改为yyyy-mm-dd
  4. 保存文件
  5. 导入MySQL

这是您不需要以文本形式导入,然后尝试将数据转换为DateTime