如何在postgres中执行此限制?

时间:2016-03-12 14:26:46

标签: sql postgresql date

我创建了这个表:

create table sales(
    code              varchar(3)
    saledate          date,
    CONSTRAINT pk_codesale PRIMARY KEY (code)
);

日期将是每个月的第五天,但如果是星期一,则日期将是第二天,即第六天。

1 个答案:

答案 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)