更具体。我有此活动的桌子
create table event(
id NUMERIC(3) PRIMARY KEY,
date DATE
)
答案 0 :(得分:2)
检查约束可以具有基于多个列的条件。在这里,如果canceled
为0
,则要允许任何日期;如果不是,则要允许特定的日期范围:
ALTER TABLE event
ADD CONSTRAINT C_event_canceled CHECK(
canceled = 0 OR
date >= to_date('01/01/2021', 'dd/mm/yyyy')
);
答案 1 :(得分:2)
不允许取消1.01.2021之前的事件
Mureinik的答案是正确的。但是,此版本更接近您要表达的内容:
check (not (cancelled = 1 and date < date '2021-01-01') )
请注意,Oracle使用date
作为日期常量的前缀。另外,date
是一种数据类型-使其成为列名的非常不好的选择。我建议:
check (not (cancelled = 1 and event_date < date '2021-01-01') )