使用bigint日期时间选择超过X天的记录

时间:2011-12-06 15:03:39

标签: sql postgresql timestamp bigint

我的日期在我的表中存储为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')

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

我的SQL技能很弱,所以很容易:)。谢谢你的帮助。

1 个答案:

答案 0 :(得分: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进行一次计算,或者对每次记录进行比较。