Oracle - 仅允许特定字符的约束

时间:2017-03-25 14:35:44

标签: sql oracle constraints

我想对列进行约束,所以我只能插入字母M,F或T. 我尝试用REGEXP_LIKE创建一个,但是我得到了错误。

ALTER TABLE [TABLE_NAME] ADD CONSTRAINT 
[CONSTR_NAME] CHECK (REGEXP_LIKE (COL, '^[M-M,F-F,T-T])\w+'));

1 个答案:

答案 0 :(得分:3)

您可以这样做:

ALTER TABLE [TABLE_NAME] ADD CONSTRAINT [CONSTR_NAME]  
    CHECK (REGEXP_LIKE(COL, '^[MFT]*$'));

即,该列具有任意次数的字母M,F或T中的任何一个。这些是从字符串开头(^)到结尾($)允许的唯一字符。

注意:空字符串与此模式不匹配,因为它在Oracle中等同于NULL(默认情况下)。

我还应该注意到你的问题有点含糊不清。如果该值只能是M,F或T中的一个,则使用IN

ALTER TABLE [TABLE_NAME] ADD CONSTRAINT [CONSTR_NAME]  
    CHECK (COL IN ('M', 'F', 'T') );