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

为何MySQL中STR_TO_DATE函数返回NULL值?SQL新手求助

解决MySQL文本日期转换为日期类型的问题

核心问题分析

你遇到的NULL结果主要来自两个原因:

  1. 格式匹配符错误:你使用的'%y-%m-%d %T'对应两位年-月-日+时分秒的格式,和你的实际日期格式dd/mm/yyyy hh:ii完全不匹配。
  2. 列名含BOM字符:查询语句里的Date是UTF-8的BOM头字符,导致MySQL无法正确识别列名。

解决步骤

1. 测试日期转换(先验证正确性)

执行以下查询,确认转换结果符合预期:

SELECT 
  STR_TO_DATE(TRIM(LEADING 0xEFBBBF FROM `Date`), '%d/%m/%Y %H:%i') AS converted_date
FROM newschema.eth_1h_rev2;
  • %d:两位数字的日期(01-31)
  • %m:两位数字的月份(01-12)
  • %Y:四位数字的年份(如2024)
  • %H:24小时制的小时(00-23)
  • %i:两位数字的分钟(00-59)
  • TRIM(LEADING 0xEFBBBF FROM \Date``):去除列值前的BOM头字符,确保MySQL能正确读取内容。

2. 永久修改列类型(确认转换无误后执行)

如果测试结果正确,可以修改表结构,将原文本列替换为日期类型:

-- 1. 添加临时列存储转换后的日期值
ALTER TABLE newschema.eth_1h_rev2 ADD COLUMN temp_date DATETIME;

-- 2. 将转换后的值写入临时列
UPDATE newschema.eth_1h_rev2 
SET temp_date = STR_TO_DATE(TRIM(LEADING 0xEFBBBF FROM `Date`), '%d/%m/%Y %H:%i');

-- 3. 验证数据无误后,删除原列并重命名临时列
ALTER TABLE newschema.eth_1h_rev2 
DROP COLUMN `Date`,
RENAME COLUMN temp_date TO `Date`;

注意事项

  • 执行UPDATE和ALTER TABLE前,务必备份数据表,避免数据丢失。
  • 如果转换后仍有NULL值,说明对应行的原日期文本格式不规范(比如日期超过31、月份超过12等),需要单独排查这些异常行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:11:03