2

所以我想检查 varchar2 的格式是 4 个字母字符,然后是 3 个数字字符,例如 AABB123 或 LMNO987

到目前为止,我已经尝试过:

CONSTRAINT Code_Check check (REGEXP_LIKE(Code,'[^A-Z][^A-Z][^A-Z][^A-Z][0-9][0-9][0-9]'))

CONSTRAINT Check_Code check (Code LIKE '[^A-Z][^A-Z][^A-Z][^A-Z][0-9][0-9][0-9]'

CONSTRAINT Check_Code check (Code LIKE '[A-Z][A-Z][A-Z][A-Z][0-9][0-9][0-9]')

CONSTRAINT Check_Code check (Code regexp_LIKE '[A-Z][A-Z][A-Z][A-Z][0-9][0-9][0-9]')

CONSTRAINT Check_Code check (Code LIKE '[^A-Z]{4}[0-9]{3}')

但只是得到错误:

insert into Table1 (Code) values ('HELP555')
Error report:
SQL Error: ORA-02290: check constraint (BOB.TABLE1_CHECK_CODE) violated
02290. 00000 - "check constraint (%s.%s) violated"
*Cause: The values being inserted do not satisfy the named check
*Action: do not insert values that violate the constraint.
4

1 回答 1

2

正则表达式不对,而且你使用的方式很麻烦。

相反,您可以选择使用POSIX 字符类。在您的具体情况下,它将是这样的:

[[:alpha:]]{4}[[:digit:]]{3}

所以约束检查是

CONSTRAINT Code_Check check (REGEXP_LIKE(Paper_Code,'[[:alpha:]]{4}[[:digit:]]{3}')

这会检查是否有 4 个字母字符,后跟 3 个数字。

正则表达式备忘单上提供的SQL 小提琴示例和更多信息

于 2013-08-07T10:52:51.847 回答