MySQL运行查询时报#1292 Incorrect date time value错误如何解决?
问题解决方法
报错根因
date_field字段存储的是整型Unix时间戳,MySQL的DATE()函数仅支持DATE/DATETIME类型的合法日期值作为入参,直接传入整型时间戳会触发类型不匹配报错,该问题和sql_mode配置没有直接关联。
可用解决方案
方案1:转换时间戳为日期格式后筛选
先通过FROM_UNIXTIME()函数将Unix时间戳转换为合法的日期时间格式,再用DATE()函数做日期判断,写法如下:
SELECT * FROM `tblletter` WHERE DATE(FROM_UNIXTIME(date_field)) BETWEEN '2021-09-10' AND '2021-09-15'
方案2:转换查询日期为时间戳后筛选(性能更优)
将需要匹配的起止日期转换为Unix时间戳,直接和date_field的整型值比较,不需要对每行数据的字段做函数计算,可利用date_field字段的索引提升查询效率:
SELECT * FROM `tblletter` WHERE date_field BETWEEN UNIX_TIMESTAMP('2021-09-10 00:00:00') AND UNIX_TIMESTAMP('2021-09-15 23:59:59')
如果要避免处理23:59:59的边界问题,也可以改写为半开区间写法:
SELECT * FROM `tblletter` WHERE date_field >= UNIX_TIMESTAMP('2021-09-10') AND date_field < UNIX_TIMESTAMP('2021-09-16')
该写法同样覆盖2021-09-10到2021-09-15的全部数据,不会出现日期边界遗漏问题。
内容的提问来源于stack exchange,提问作者HGiri
相关产品推荐
相关产品推荐

