为什么SQL中匹配日期时=不生效,用<和>反而能提取到相同日期数据
问题原因说明
1. 等号匹配失效的核心原因
你表中的created_at字段是带时分秒的日期时间类型(如DATETIME、TIMESTAMP),而非纯日期(DATE)类型。
当执行created_at = '2021-10-14'时,数据库会自动将字符串'2021-10-14'补全为'2021-10-14 00:00:00'再做等值匹配。你的业务数据中created_at都带有具体时间(例如2021-10-14 14:23:05),只有刚好在10月14日0点整创建的数据才会命中,没有这类数据就会返回0行结果。
2. 范围查询生效的原因
范围条件created_at > '2021-10-14' and created_at < '2021-10-15'会被数据库转换为完整的时间区间:
- 下界:大于
2021-10-14 00:00:00 - 上界:小于
2021-10-15 00:00:00
这个区间刚好覆盖了2021年10月14日全天所有带时分秒的时间点,所以能正常匹配到所有当天创建的客户数据。
补充:其他等价的查询写法
- 若
created_at字段没有索引,可以直接转纯日期匹配:select * from customers where date(created_at) = '2021-10-14' - 若要兼容毫秒级时间,优先使用你原本的开区间范围查询,避免
between语法漏掉23:59:59.xxx的高精度时间数据。
内容的提问来源于stack exchange,提问作者Ascharya SF
相关产品推荐
相关产品推荐

