我想在创建记录的同一天每个月发送一封电子邮件。问题是,如果记录是在一个月的29日,30日或31日创建的,那么电子邮件可能不会被发送出去。我如何检查日期字段是否与今天匹配,或者如果当天不存在当天,那么检查今天是否是该月的最后一天?
供参考,这是一个示例表:
CREATE TABLE charges (
id INTEGER,
dt_created TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
)
这是一个适用于第1-28天的SQL调用:
SELECT id FROM charges WHERE extract(day from dt_created) = extract(day from now())
答案 0 :(得分:2)
这种天真的实现可能如下:
with dt as (select '2014-03-31'::date dt_created, '2014-02-28'::date now)
select
case when extract(day from (date_trunc('MONTH', now) + INTERVAL '1 MONTH - 1 day')) = extract(day from now)
then extract(day from dt_created) >= extract(day from now)
else extract(day from dt_created) = extract(day from now)
end matches
from dt
因此,您首先要检查当天是否是本月的最后一天。如果是这样 - 检查创建日期是否与当天匹配或稍后,否则检查它是否匹配