MySQL Timestamp模糊范围查询异常:为何显示11-03数据不显示10-03数据
问题原因分析
- 你写的
>= "2023-10-03%"和<= "2023-11-03%"是字符串字典序比较,而非预期的日期范围匹配:- 当
capture_time是datetime类型时,数据库会将其转换为字符串格式(如'2023-10-03 23:59:59')进行比较。'2023-10-03 '(注意末尾的空格)的ASCII码(32)小于'2023-10-03%'中%的ASCII码(37),因此'2023-10-03 23:59:59' < '2023-10-03%',不满足>=条件,被过滤掉。 - 而
'2023-11-03 23:59:59'同样小于'2023-11-03%',但你的条件是<= '2023-11-03%',因此该数据满足条件被查询出来。
- 当
正确的SQL写法
如果capture_time是datetime/timestamp类型,直接用日期范围查询即可,不需要加%:
SELECT * FROM vehicle_warning_message v WHERE v.capture_time >= '2023-10-03 00:00:00' AND v.capture_time <= '2023-11-03 23:59:59';
或者更简洁的BETWEEN写法:
SELECT * FROM vehicle_warning_message v WHERE v.capture_time BETWEEN '2023-10-03 00:00:00' AND '2023-11-03 23:59:59';
如果要避免毫秒级数据遗漏,还可以这样写:
SELECT * FROM vehicle_warning_message v WHERE v.capture_time >= '2023-10-03' AND v.capture_time < '2023-11-04';
内容的提问来源于stack exchange,提问作者a8030962
相关产品推荐
相关产品推荐

