You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:将CSV中特定日期格式转换为MySQL DATETIME格式

问题描述

CSV数据中In_Time列的日期格式如下:

In_Time
1/1/17 1:07 AM
1/1/17 12:59 PM

将该列以文本格式导入MySQL后,尝试用STR_TO_DATE()函数转换为datetime类型时触发错误:

Incorrect datetime value: '1/1/17 12:27 AM' for function str_to_date

执行的SQL语句:

UPDATE mytable
SET In_Time = STR_TO_DATE(ED_Arrival_Time, '%d/%m%y %h: %i: %p');
解决方案

你使用的格式符与实际日期格式不匹配,这是报错的核心原因,调整格式符即可解决:

  • 日期部分1/1/17是「不带前导零的月/日/两位年份」,对应格式符为%c/%e/%y(%c表示无前置零的月份,%e表示无前置零的日期,%y表示两位年份);如果后续数据可能出现带前导零的月/日,也可以用%m/%d/%y,两种格式都兼容你的现有数据。
  • 时间部分1:07 AM的格式符不需要额外冒号,正确写法是%h:%i %p(%h对应12小时制的小时,%i对应分钟,%p对应AM/PM标识)。

另外注意:如果In_Time当前是文本类型,直接更新为datetime值可能出现类型兼容问题,建议先新增一个datetime类型的列,转换完成后再按需替换原列:

-- 新增datetime类型列
ALTER TABLE mytable ADD COLUMN In_Time_Datetime DATETIME;

-- 批量转换数据
UPDATE mytable
SET In_Time_Datetime = STR_TO_DATE(ED_Arrival_Time, '%c/%e/%y %h:%i %p');

如果已经将In_Time列修改为datetime类型,可直接执行更新:

UPDATE mytable
SET In_Time = STR_TO_DATE(ED_Arrival_Time, '%c/%e/%y %h:%i %p');

你可以先执行以下查询验证转换逻辑是否正确:

SELECT STR_TO_DATE('1/1/17 12:27 AM', '%c/%e/%y %h:%i %p') AS converted_time;

内容的提问来源于stack exchange,提问作者cyrus24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:50:21