【问题标题】:SQL query to set CHECK constraint on a column based on the value in other columnSQL 查询根据其他列中的值设置列上的 CHECK 约束
【发布时间】:2021-01-27 21:30:16
【问题描述】:

我需要根据其他列中的值(都在同一个表中)对列设置 CHECK 约束

就像当 COLUMN A 为 NULL 时,COLUMN B 应该为 NULL 但是如果 COLUMN A 的值是 1 或 2 或 3,那么 COLUMN B 肯定应该有一个日期值。

【问题讨论】:

    标签: sql oracle ddl check-constraints


    【解决方案1】:

    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)),
        . . .
    );
    

    日期匹配不准确,但如果该列确实存储了字符串,则您尚未指定“日期”的格式。

    【讨论】:

      【解决方案2】:

      您想要的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);
      

      【讨论】:

      • 这个查询非常适合我的情况。非常感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多