我有兩個日期列refused_at,requested_at在一個表中foo,兩個日期都可以NULL,只能填寫一個,不能同時填寫。
所以,我需要添加一個CHECK CONSTRAINT,我應該為NANDoperator使用什么?
它應該看起來像這樣:
ALTER TABLE foo
ADD CONSTRAINT check_status
CHECK ((refused_at IS NULL) <> (requested_at IS NULL));
但<>似乎是一個XOR考驗。
uj5u.com熱心網友回復:
<>不是“異或”-您只需比較兩個布林值,例如true <> falseor true <> true。
你可以用布爾邏輯來表達這一點,但使用 Postgres 的num_nonnulls()函式會使這更容易。
ALTER TABLE foo
ADD CONSTRAINT check_status
CHECK (num_nonnulls(refused_at, requested_at) <= 1);
這將允許零個“非空值”(意味著兩者都是空值)或至少一個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341494.html
標籤:PostgreSQL
