BETWEEN 的行为不具有包容性

BETWEEN is not behaving in an inclusive manner

我有一个查询 returns 来自 table 的数据,基于用户 ID 和两个日期。日期都是这样的: 2018-10-07T00:00:00.000Z 2018-10-06T00:00:00.000Z ...等等。

大多数时候查询会提供一个日期范围,如下所示:

SELECT * FROM "some_table" WHERE (user_id = 3 AND TIMESTAMP BETWEEN '2018-10-01' AND '2018-10-05') ORDER BY TIMESTAMP DESC

但有时用户可能会指定一天,在这种情况下查询将如下所示:

SELECT * FROM "some_table" WHERE (user_id = 3 AND TIMESTAMP BETWEEN '2018-10-05' AND '2018-10-05') ORDER BY TIMESTAMP DESC

据我了解,BETWEEN 应该是包容性的...任何人都可以帮助我理解为什么它没有返回任何数据吗?

时间戳'2018-10-05'被理解为2018-10-05T00:00:00.000Z,所以你的范围是2018-10-05T00:00:00.000Z2018-10-05T00:00:00.000Z,只有一毫秒。在查询中包括小时、分钟和秒,或者在开始日期和结束日期为同一天时将结束日期增加一天。

为了更可靠地避免此问题,您可以考虑完全不对日期使用 BETWEEN。请改用 TIMESTAMP >= '2018-10-05' AND TIMESTAMP < '2018-10-06' 之类的内容。