【问题标题】:Use of BETWEEN with timestamps in PostgreSQL在 PostgreSQL 中使用带时间戳的 BETWEEN
【发布时间】: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,但不是当天晚些时候的时间戳。所以 查询似乎可以工作,但只要你得到一个准确的条目 午夜,你最终会重复计算它。

谁能解释这种“重复计算”是如何发生的?

【问题讨论】:

    标签: postgresql between


    【解决方案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)”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2014-01-24
    相关资源
    最近更新 更多