Sql 使用bigint datetimes选择早于X天的记录

Sql 使用bigint datetimes选择早于X天的记录,sql,postgresql,timestamp,bigint,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,我正在尝试选择超过30天的记录。我在SO和Google上看到了很多与这个问题相关的问题,但我没有找到我需要的

以下是我所拥有的,似乎效率很低:

SELECT
  COUNT(*) 
FROM 
  alert
WHERE 
  ('1969-12-31 19:00:00 GMT'::timestamp + (alert.mytstamp::text)::interval) < (localtimestamp - INTERVAL '30 days')
SELECT
  COUNT(*) 
FROM 
  alert
WHERE 
  alert.timestamp < extract('epoch' from (CURRENT_TIMESTAMP  - INTERVAL '10 days'))::bigint
选择
计数(*)
从…起
警觉的
哪里
('1969-12-31 19:00:00 GMT'::timestamp+(alert.mytstamp::text)::interval)<(localtimestamp-interval'30天')
据我所知,它将bigint
mytstamp
字段转换为时间戳,以便将其与“30天前”时间戳进行比较。它对表中的每一条记录都这样做:(。将当前时间戳(30天)转换为一次bigint,然后将其与我的所有bigint日期进行比较似乎更有效


我的SQL技能很弱,所以请放心:)。感谢您的帮助。

在发布到SO之后,我再次找到了解决方案。我想这是一个幸运符。无论如何,这似乎是我想要的,而且效率更高:

SELECT
  COUNT(*) 
FROM 
  alert
WHERE 
  ('1969-12-31 19:00:00 GMT'::timestamp + (alert.mytstamp::text)::interval) < (localtimestamp - INTERVAL '30 days')
SELECT
  COUNT(*) 
FROM 
  alert
WHERE 
  alert.timestamp < extract('epoch' from (CURRENT_TIMESTAMP  - INTERVAL '10 days'))::bigint
选择
计数(*)
从…起
警觉的
哪里
alert.timestamp

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

CURRENT_TIMESTAMP和计算都是确定性的;PostgreSQL应该计算一次。(CURRENT_TIMESTAMP是服务器在当前事务开始时的时间。)可能会有不同的行为。