【发布时间】:2018-10-10 19:14:23
【问题描述】:
我有一个查询,它根据用户 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 应该是包容性的……谁能帮我理解为什么它没有返回数据?
【问题讨论】:
-
它包含,但您的日期范围从
20181005 00:00:00.00到20181005 00:00:00.00...soooo -
它将正确包含所有时间戳 = 2018-10-05 00:00:00.0000000000000000 但其后 1 纳秒的记录。
-
假设您只检查日期而不是日期时间,您可以将 TIMESTAMP 转换为日期并将其用于比较 -- TIMESTAMP::date BETWEEN '2018-10-05' AND '2018-10 -05'
-
2018-10-06T00:00:00.000不是“日期” - 它是时间戳,因此 时间 是比较的一部分。
标签: sql postgresql between