忽略时间戳postgres的秒数

时间:2014-04-25 06:49:44

标签: postgresql

我每1分钟运行一次cron作业,以通知用户参加活动

select * from events where event_start = now()  - interval '30 minutes'

这样我就可以在30分钟的活动之前向用户发送通知

问题是事件开始是一个时间戳字段,所以如果有一个秒的差异,它将不起作用,所以如何忽略秒部分。

2 个答案:

答案 0 :(得分:1)

您可以使用date_trunc()删除秒:

select * 
from events 
where event_start = date_trunc('second', now())  - interval '30' minutes

手册中的更多详细信息:http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC

答案 1 :(得分:0)

为了忽略秒数,可以使用date_trunc()函数。

date_trunc函数在概念上类似于trunc函数 数字。

date_trunc(field,source [,time_zone])source是一个值表达式 类型的时间戳,带时区的时间戳或间隔。 (的值 日期和时间类型会自动转换为时间戳或时间间隔, )字段选择截断输入的精度 值。返回值同样是timestamp类型,timestamp具有 时区或间隔,并且所有字段都较小 比所选的显着性设置为零(或对于天和 月)。

该字段的有效值为:

  • 微秒
  • 毫秒
  • 分钟
  • 小时
  • 季度
  • 十年
  • 世纪
  • 千年
SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
Result: 2001-02-16 20:00:00

SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
Result: 2001-01-01 00:00:00

SELECT date_trunc('day', TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40+00');
Result: 2001-02-16 00:00:00-05

SELECT date_trunc('day', TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40+00', 'Australia/Sydney');
Result: 2001-02-16 08:00:00-05

SELECT date_trunc('hour', INTERVAL '3 days 02:47:33');
Result: 3 days 02:00:00

因此,您应该使用:

SELECT * 
FROM events
WHERE event_start = date_trunc('minute', now()) - INTERVAL '30' MINUTE;