我創造了這個表:如何在postgres中執行此限制?
create table sales(
code varchar(3)
saledate date,
CONSTRAINT pk_codesale PRIMARY KEY (code)
);
日期將在每月的第五天,但如果它是星期一,日期將在第二天,也就是第六天。
我創造了這個表:如何在postgres中執行此限制?
create table sales(
code varchar(3)
saledate date,
CONSTRAINT pk_codesale PRIMARY KEY (code)
);
日期將在每月的第五天,但如果它是星期一,日期將在第二天,也就是第六天。
您可以添加一個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中,這有點複雜,觸發器可能是要走的路。我沒有編寫觸發器的專業知識,但修改邏輯是這樣的:
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)
感謝您的回覆,但是有一些方法是默認完成的? – postgresqlx12
@ postgresqlx12:你的意思是*默認情況下*?當您將此檢查添加到CREATE TABLE時,只要您嘗試插入「錯誤」值,PostgreSQL就會返回錯誤消息。 – dnoeth
檢查約束*可防止輸入錯誤的數據。但它不會將數據更改爲正確的日期。 –
你的問題是什麼?我不明白你在做什麼。 –
我嘗試做限制,但沒有。 – postgresqlx12