更具体地说。我有这张事件表
create table event(
id NUMERIC(3) PRIMARY KEY,
date DATE
)
我需要添加另一列(已取消
),该列仅接受 0
和 1
值。这里的问题是,该列还需要一个约束,不允许取消 1.01.2021 之前的事件(这意味着 cancel
值不能为 1
(true))例如,日期为 2020 年 9 月 15 日的事件)。有什么提示吗?这是我得到的“最接近的”,但我知道这是错误的,通过在其他线程上搜索,我了解到约束内不允许查询。
我尝试过的(我知道这是不正确的,因为它不允许添加日期在 2021 年 1 月 1 日之前的条目):
ALTER TABLE event
ADD canceled number(1) DEFAULT 0 CHECK(canceled in (0,1));
ALTER TABLE event
ADD CONSTRAINT C_event_canceled CHECK(date >= to_date('01/01/2021', 'dd/mm/yyyy'));
忘了说,我不能使用任何函数或相关的东西,只是简单的查询。
最佳答案
doesn't allow events before 1.01.2021 to be canceled
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') )
关于sql - 有没有办法根据其中一列值添加表约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63981896/