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

MySQL日期范围过滤报错#1292:截断不正确的日期时间值

问题原因及解决方法

为什么出现#1292警告?

你的SQL语句里,date_column是VARCHAR字符串类型,而STR_TO_DATE返回的是DATETIME类型。MySQL执行条件判断时,会尝试隐式把字符串类型的日期转换成DATETIME,但原字符串格式是日.月.年 时:分:秒,MySQL默认的日期转换规则识别不了这种格式,就会触发“截断不正确的日期时间值”的警告。

为什么不能用%d.%d.%m.%Y %H:%i:%s格式?

这个格式串完全不符合你的日期字符串结构:

  • 你的日期是12.12.2022 16:14:34,对应结构是日.月.年 时:分:秒,正确的格式串应该是%d.%m.%Y %H:%i:%s
  • 你写的%d.%d.%m.%Y意味着日期要分成四段(日.日.月.年),但原字符串只有三段(日.月.年),格式不匹配,根本无法解析出正确的日期。

正确的解决方式

1. 临时修复:转换字段后再比较

把date_column也用STR_TO_DATE转换成DATETIME类型,避免隐式转换的问题,SQL改成:

select * from orders 
where STR_TO_DATE(date_column, '%d.%m.%Y %H:%i:%s') 
between STR_TO_DATE('24.06.2025 00:00:00', '%d.%m.%Y %H:%i:%s')
and STR_TO_DATE('25.06.2025 00:00:00', '%d.%m.%Y %H:%i:%s') 
order by STR_TO_DATE(date_column, '%d.%m.%Y %H:%i:%s') ASC;

2. 长期优化:修改字段类型

把date_column的类型从VARCHAR改成DATETIME,这样不仅能彻底避免格式转换的问题,还能提升查询性能,也能约束字段只能存入合法的日期时间数据。修改语句:

ALTER TABLE orders MODIFY COLUMN date_column DATETIME;

注意:修改前要确保所有date_column的值都是合法的%d.%m.%Y %H:%i:%s格式,否则修改会失败。可以先执行下面的语句检查无效数据:

select date_column from orders where STR_TO_DATE(date_column, '%d.%m.%Y %H:%i:%s') is null;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:18:19