我创建了这个表:
create table sales(
code varchar(3)
saledate date,
CONSTRAINT pk_codesale PRIMARY KEY (code)
);
日期将是每个月的第五天,但如果是星期一,则日期将是第二天,即第六天。
答案 0 :(得分:2)
您可以添加CHECK约束:
check((extract(day from saledate) = 5 and -- 5. day of month
extract(dow from saledate) <> 1) -- but no monday
or
(extract(day from saledate) = 6 and -- 6. day of month
extract(dow from saledate) = 2) -- and tuesday
)
编辑:
如果要在插入/更新到该月的5.或6.期间修改任何日期,则应在应用程序中执行此操作。在SQL中它有点复杂,触发器可能是要走的路。我没有在PG中编写触发器的专业知识,但修改逻辑是这样的:
date_trunc('mon',:inDate) + interval '4' day
+ (case
when extract(dow from date_trunc('mon',:inDate) + interval '4' day) = 1
then 1
else 0
end * interval '1' day)