在 PostgreSQL 中使用带时间戳的 BETWEEN
Posted
技术标签:
【中文标题】在 PostgreSQL 中使用带时间戳的 BETWEEN【英文标题】:Use of BETWEEN with timestamps in PostgreSQL 【发布时间】:2019-12-10 09:11:04 【问题描述】:我在 PostgreSQL wiki 中偶然发现了这个页面,建议不要使用 BETWEEN with timestamps:
为什么不呢?
BETWEEN 使用闭区间比较: 结果中包含指定的范围。
这是表单查询的一个特殊问题
SELECT * FROM blah WHERE timestampcol BETWEEN '2018-06-01' AND '2018-06-08'
这将包括时间戳正好是 2018-06-08 的结果 00:00:00.000000,但不是当天晚些时候的时间戳。所以 查询似乎可以工作,但只要你得到一个准确的条目 午夜,你最终会重复计算它。
谁能解释这种“重复计算”是如何发生的?
【问题讨论】:
【参考方案1】:通常在使用 BETWEEN 时,您希望使用多个范围(在单独的查询中)累积覆盖所有数据。
如果您的查询的下一次调用使用 BETWEEN '2018-06-08' AND '2018-06-015',则 2018-06-08 的确切午夜将包含在两个调用中。另一方面,如果下一个使用 BETWEEN '2018-06-09' AND '2018-06-015',则 2018-06-08 除了确切的午夜之外的所有时间都将被忽略。没有简单的方法(使用 BETWEEN)来构建覆盖每个数据点一次且仅一次的范围。
【讨论】:
关于“不容易的方法...”,timestampcol >= '2018-06-01' AND timestampcol < '2018-06-08'
不会解决问题吗?
是的。这就是这篇文章的重点。我添加了“(使用 BETWEEN)”以上是关于在 PostgreSQL 中使用带时间戳的 BETWEEN的主要内容,如果未能解决你的问题,请参考以下文章