我每1分钟运行一次cron作业,以通知用户参加活动
select * from events where event_start = now() - interval '30 minutes'
这样我就可以在30分钟的活动之前向用户发送通知
问题是事件开始是一个时间戳字段,所以如果有一个秒的差异,它将不起作用,所以如何忽略秒部分。
答案 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;