SQL CHECK CONSTRAINT VARCHAR

时间:2012-11-05 15:32:15

标签: sql oracle constraints

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

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

示例,数据可以是ABCD2121,ABCD1111。

范围 - ABCD0001至ABCD9999

所以'ABCD'是固定的,而数字正在变化。

我已经在网上讨论使用'[]“来定义数字,但我无法将其整合到我的约束中。

由于

3 个答案:

答案 0 :(得分:1)

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

alter table table1
  add constraint chck_code check (regexp_like(column1, '(ABCD)[0-9]{4}') );

答案 1 :(得分: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!

答案 2 :(得分:0)

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

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

这将允许ABCD和EFGH作为前缀,后面恰好是4位数。