0

我将日期存储为 bigint 在我的表中,我正在尝试选择超过 30 天的记录。我在 SO 和 Google 上看到了大量与这个问题相关的问题,但我没有找到我需要的东西。

这是我所拥有的,这似乎非常低效:

SELECT
  COUNT(*) 
FROM 
  alert
WHERE 
  ('1969-12-31 19:00:00 GMT'::timestamp + (alert.mytstamp::text)::interval) < (localtimestamp - INTERVAL '30 days')

据我了解,它将 bigintmytstamp字段转换为时间戳,以便将其与“30 天前”时间戳进行比较。它对表中的每条记录执行此操作:(。将当前时间戳 - 30 天转换为一次 bigint 似乎更有效,然后将其与我所有的 bigint 日期进行比较。

我的 SQL 技能很弱,所以放轻松:)。谢谢您的帮助。

4

1 回答 1

1

在发布到 SO 后,我再次找到了解决方案。我猜它是一个好运的魅力。无论如何,这似乎是我正在寻找的,并且效率更高:

SELECT
  COUNT(*) 
FROM 
  alert
WHERE 
  alert.timestamp < extract('epoch' from (CURRENT_TIMESTAMP  - INTERVAL '10 days'))::bigint

我想知道 postgres 是只计算extract('epoch' from (CURRENT_TIMESTAMP - INTERVAL '10 days'))::bigint一次,还是每次比较记录。

于 2011-12-06T17:29:57.327 回答