0
create table table1
(
  column1 varchar2(8)
  check constraint column1_ch check ........
);

如何检查前 4 个字符是一组特定字母而后 4 个字符是数字的数据?以及一系列值。

例如,数据可以是 ABCD2121、ABCD1111。

范围 - ABCD0001 到 ABCD9999

所以“ABCD”在数字变化时是固定的。

我在网上找到了关于使用“[]”来定义数字的方法,但我无法将它整合到我的约束中。

谢谢

4

3 回答 3

1

最简单的方法是使用正则表达式:

alter table table1
  add constraint chck_code check (regexp_like(column1, '(ABCD)[0-9]{4}') );
于 2012-11-05T15:43:05.053 回答
0

您的检查条件应如下所示:

(column1 LIKE 'ABCD[0-9][0-9][0-9][1-9]')

编辑: 修改为使用设置前缀与字母字符范围。

这是一个使用 Microsoft SQL Server 的解决方案,它说明了这一点:

DECLARE @MyTable TABLE
(column1 varchar(8) check (column1 LIKE 'ABCD[0-9][0-9][0-9][1-9]'))

INSERT INTO @MyTable (column1)
       SELECT 'ABCD0000'
 UNION SELECT 'ABCD2121'
 UNION SELECT 'ABCD1111';

SELECT *
  FROM @MyTable;

INSERT INTO @MyTable (column1)
SELECT 'ABCD000A'; --<== Fails!

INSERT INTO @MyTable (column1)
SELECT 'ABCD221'; --<== Fails!
于 2012-11-05T15:40:58.687 回答
0

如果您有一组固定的前缀,请使用 regexp_like 并枚举前缀列表:

alter table test_1 
add constraint chk_col1 check(regexp_like(column1, '(ABCD|EFGH)[0-9]{4}'));

这将允许 ABCD 和 EFGH 作为前缀,后跟正好 4 位数字。

于 2012-11-05T15:42:44.547 回答