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.000Z
到2018-10-05T00:00:00.000Z
,只有一毫秒。在查询中包括小时、分钟和秒,或者在开始日期和结束日期为同一天时将结束日期增加一天。
为了更可靠地避免此问题,您可以考虑完全不对日期使用 BETWEEN
。请改用 TIMESTAMP >= '2018-10-05' AND TIMESTAMP < '2018-10-06'
之类的内容。
我有一个查询 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.000Z
到2018-10-05T00:00:00.000Z
,只有一毫秒。在查询中包括小时、分钟和秒,或者在开始日期和结束日期为同一天时将结束日期增加一天。
为了更可靠地避免此问题,您可以考虑完全不对日期使用 BETWEEN
。请改用 TIMESTAMP >= '2018-10-05' AND TIMESTAMP < '2018-10-06'
之类的内容。