Oracle:如何添加约束以仅允许字符串列中的特定数字集

时间:2017-03-01 10:44:04

标签: sql oracle constraints

我有一个字符串列,用于存储数字。如何添加约束以确保该数字仅包含67。示例676666但我不想要565677

3 个答案:

答案 0 :(得分:4)

添加检查约束:

CONSTRAINT check_numbers CHECK (regexp_like(the_column, '^[67]+$')) 

这需要最后一位数。

答案 1 :(得分:1)

添加此约束。我没有运行它,但请尝试

CONSTRAINT CHECK_6_7_ONLY CHECK (regexp_replace(trim(column_name),'6|7','') is null)

编辑:在处理字符串时添加了trim

答案 2 :(得分:1)

另一种选择是使用translate

create table t42 (
  foo varchar2(10),
  constraint sixesorsevens check (translate(foo, 'x67', 'x') is null)
);

Table T42 created.

insert into t42 (foo) values (null);

1 row inserted.

SQL> insert into t42 (foo) values ('676666');

1 row inserted.

SQL> insert into t42 (foo) values ('576666');

insert into t42 (foo) values ('576666')
*
ERROR at line 1:
ORA-02290: check constraint (MYSCHEMA.SIXESORSEVENS) violated

...但regexp_like()版本对于必须维护此版本的人来说可能更清楚。