微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL查询基于其他列中的值在列上设置CHECK约束

如何解决SQL查询基于其他列中的值在列上设置CHECK约束

我需要基于另一列(均在同一表中)中的值在列上设置CHECK约束

就像当COLUMN A为NULL时,COLUMN B应该为NULL 但是,如果A栏的值为1或2或3,则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,. . .
);

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

,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。