繁体   English   中英

使用bigint日期时间选择X天之前的记录

[英]Using bigint datetimes to select records older than X 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')

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

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

发布到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还是对每个记录比较进行计算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM