推荐写法
推荐写法
-- 2024 年 6 月整月(含毫秒)
SELECT * FROM orders
WHERE created_at >= '2024-06-01'
AND created_at < '2024-07-01';常见错误
常见错误
-- 会漏掉 6-30 的带时间数据(且 BETWEEN 对 DATETIME 是闭区间)
SELECT * FROM orders
WHERE created_at BETWEEN '2024-06-01' AND '2024-06-30';| 为什么 | DATETIME 带时分秒,'2024-06-30' 等价于 00:00:00,当天其余时间全被排除 |
|---|---|
| 秒/毫秒列 | 同上;< 下一整天 一劳永逸 |
| 索引 | 范围条件可走 B+ 树索引(created_at 上建索引) |
若列是 DATE 类型,BETWEEN a AND b 是安全的;问题只出在带时间的 DATETIME/TIMESTAMP 上。