我有一个查询,该查询根据用户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
应该具有包容性……任何人都可以帮助我理解为什么它不返回任何数据吗?
答案 0 :(得分:3)
时间戳'2018-10-05'
被理解为2018-10-05T00:00:00.000Z
,因此您的范围是从2018-10-05T00:00:00.000Z
到2018-10-05T00:00:00.000Z
,只有一毫秒。在查询中包括小时,分钟和秒,或者当开始日期和结束日期都在同一天时,将结束日期增加一天。
为更可靠地避免该问题,您可以考虑完全不使用带有日期的BETWEEN
。改用TIMESTAMP >= '2018-10-05' AND TIMESTAMP < '2018-10-06'
之类的东西。