首页 > 解决方案 > 这些查询 MySQL 日期范围之间有什么区别

问题描述

我在此列中有一个名为 order_match 的表

+----+-----------+
| id | createdAt |
+----+-----------+

所以我想查询以找出出现在 7 天后范围内的 ID

我有 2 个查询,idk 哪个是真的,为什么它会变成真的

查询 1

SELECT om.id
    FROM order_match om
    WHERE om.createdAt >= 
    DATE_SUB(curdate(), INTERVAL 1 WEEK)  AND
    om.createdAt <
    ADDDATE(DATE_SUB(curdate(), INTERVAL 1 WEEK), INTERVAL 9 DAY)
    GROUP BY om.id;

它返回 57 id

查询 2

SELECT om.id
    FROM order_match om
    WHERE om.createdAt >= 
    now() - INTERVAL 7 DAY  AND
    om.createdAt <
    now() + INTERVAL 1 DAY
    GROUP BY om.id;

它返回 2 个 id

idk哪一个是真的?或者这两个查询都是错误的?

EXPECTED RESULTS

assume curdate = '2020-02-05'

THEN IF the table was become like this

+----+------------+
| id | createdAt  |
+----+------------+
|  1 | 2020-02-02 |
|  2 | 2020-02-03 |
|  3 | 2020-02-04 |
+----+------------+

THEN all of the ID are included because the ids was on the range between 2020-02-05  and 7 days behind (2020-01-30 00:00:00)

标签: mysqlsqldate

解决方案


您的第一个查询找到从 7 天前的午夜开始的 9 天范围;您的第二个查询仅找到从7 天前的当前时间开始的8天范围。由于范围不同,结果不同也就不足为奇了。


推荐阅读