BETWEEN的行为方式不具有包容性

时间:2018-10-10 19:14:23

标签: sql postgresql between

我有一个查询,该查询根据用户ID和两个日期从表中返回数据。日期全部如下所示: reverse 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 应该具有包容性……任何人都可以帮助我理解为什么它不返回任何数据吗?

1 个答案:

答案 0 :(得分:3)

时间戳'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'之类的东西。