PostgreSQL中基于入职年份用触发器更新提醒日期字段的问题
修正你的PostgreSQL触发器实现,让reminder自动设为下一年1月1日
看起来你已经找对了用触发器+函数的思路,只是在日期生成的参数和细节上有点小偏差,我帮你修正并补全完整的实现:
首先,你当前的函数里,make_date(...,2,3)会生成2月3日,这和你想要的下一年1月1日不符;另外date_of_join本身就是date类型,没必要转成timestamp再提取年份。
正确的触发器函数
CREATE OR REPLACE FUNCTION update_reminder() RETURNS TRIGGER AS $$ BEGIN -- 提取date_of_join的年份,加1后生成下一年的1月1日 NEW.reminder := make_date( EXTRACT(YEAR FROM NEW.date_of_join)::INTEGER + 1, 1, 1 ); RETURN NEW; END $$ LANGUAGE plpgsql;
完整的触发器语句
你之前的触发器没写完,这里给出完整的BEFORE INSERT触发器:
CREATE TRIGGER Trigger1 BEFORE INSERT ON faculty FOR EACH ROW EXECUTE FUNCTION update_reminder();
可选扩展:支持更新时同步reminder
如果你希望当date_of_join字段被更新时,reminder也自动同步更新,可以修改触发器,让它同时响应INSERT和UPDATE操作:
CREATE TRIGGER Trigger1 BEFORE INSERT OR UPDATE OF date_of_join ON faculty FOR EACH ROW EXECUTE FUNCTION update_reminder();
这样不管是插入新数据,还是修改已有数据的date_of_join,reminder都会自动设置为对应年份的下一年1月1日。
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

