SQL 查询根据其他列中的值在列上设置 CHECK 约束
SQL query to set CHECK constraint on a column based on the value in other column
我需要根据其他列中的值(都在同一个 table 中)对一个列设置 CHECK 约束
就像当 COLUMN A 为 NULL 时,COLUMN B 应该为 NULL
但是,如果 COLUMN A 的值为 1 或 2 或 3,那么 COLUMN B 肯定应该有一个日期值。
将 B
定义为日期。然后使用检查约束:
create table t (
. . .
b date,
constraint chk_t_b check (b is null or a not in (1, 2, 3)),
. . .
);
如果 b
是一个字符串,而您只是想让它“看起来”像一个日期,那么您可以这样做:
create table t (
. . .
b date,
constraint chk_t_b check (regexp_like(b, '^[0-9]{4}-[0-1][0-9]-[0-3][0-9]$') or a not in (1, 2, 3)),
. . .
);
日期匹配不准确,但如果该列确实存储字符串,您还没有指定“日期”的格式。
您想要的 CHECK
约束可以采用以下形式:
alter table t add constraint chk1
check (a is null and b is null or a in (1, 2) and b is not null);
我需要根据其他列中的值(都在同一个 table 中)对一个列设置 CHECK 约束
就像当 COLUMN A 为 NULL 时,COLUMN B 应该为 NULL 但是,如果 COLUMN A 的值为 1 或 2 或 3,那么 COLUMN B 肯定应该有一个日期值。
将 B
定义为日期。然后使用检查约束:
create table t (
. . .
b date,
constraint chk_t_b check (b is null or a not in (1, 2, 3)),
. . .
);
如果 b
是一个字符串,而您只是想让它“看起来”像一个日期,那么您可以这样做:
create table t (
. . .
b date,
constraint chk_t_b check (regexp_like(b, '^[0-9]{4}-[0-1][0-9]-[0-3][0-9]$') or a not in (1, 2, 3)),
. . .
);
日期匹配不准确,但如果该列确实存储字符串,您还没有指定“日期”的格式。
您想要的 CHECK
约束可以采用以下形式:
alter table t add constraint chk1
check (a is null and b is null or a in (1, 2) and b is not null);