用字母和数字检查约束
Check Constraint with letters and digits
我正在尝试对一个列 (varchar2(7)) 进行约束,我想在其中按此顺序拥有一个 ID Letter_Letter_Digit_Digit_Letter_Letter_Letter,因此 2 个字母、2 个数字、3 个字母。我试过类似这样的方法和一些说明:
ALTER TABLE vehicule
ADD CONSTRAINT CHK_nr_vehicul
CHECK (nr_vehicul LIKE '[A-Z][A-Z][0-9][0-9][A-Z][A-Z][A-Z]');
当我尝试给出这样的东西时 'AB00BBB' 我的约束被违反了。有什么想法吗?
谢谢!
您可以使用REGEP_LIKE()
函数,例如
ALTER TABLE vehicule
ADD CONSTRAINT chk_nr_vehicul
CHECK ( REGEXP_LIKE (nr_vehicul,'[A-Z]{2}[0-9]{2}[A-Z]{3}') );
其中大括号中的数字表示构成整个长度为 7 的字符串的每个子字符串的长度。
更新: 如果您需要插入具有其他一些模式的值,例如 AB00BB
和 B000BBB
以及当前样本值的模式( AB00BBB
),然后使用管道运算符,例如
ALTER TABLE vehicule
ADD CONSTRAINT chk_nr_vehicul
CHECK ( REGEXP_LIKE (nr_vehicul,'[A-Z]{2}[0-9]{2}[A-Z]{3}|[A-Z]{2}[0-9]{2}[A-Z]{2}|[A-Z]{1}[0-9]{3}[A-Z]{3}') );
我正在尝试对一个列 (varchar2(7)) 进行约束,我想在其中按此顺序拥有一个 ID Letter_Letter_Digit_Digit_Letter_Letter_Letter,因此 2 个字母、2 个数字、3 个字母。我试过类似这样的方法和一些说明:
ALTER TABLE vehicule
ADD CONSTRAINT CHK_nr_vehicul
CHECK (nr_vehicul LIKE '[A-Z][A-Z][0-9][0-9][A-Z][A-Z][A-Z]');
当我尝试给出这样的东西时 'AB00BBB' 我的约束被违反了。有什么想法吗?
谢谢!
您可以使用REGEP_LIKE()
函数,例如
ALTER TABLE vehicule
ADD CONSTRAINT chk_nr_vehicul
CHECK ( REGEXP_LIKE (nr_vehicul,'[A-Z]{2}[0-9]{2}[A-Z]{3}') );
其中大括号中的数字表示构成整个长度为 7 的字符串的每个子字符串的长度。
更新: 如果您需要插入具有其他一些模式的值,例如 AB00BB
和 B000BBB
以及当前样本值的模式( AB00BBB
),然后使用管道运算符,例如
ALTER TABLE vehicule
ADD CONSTRAINT chk_nr_vehicul
CHECK ( REGEXP_LIKE (nr_vehicul,'[A-Z]{2}[0-9]{2}[A-Z]{3}|[A-Z]{2}[0-9]{2}[A-Z]{2}|[A-Z]{1}[0-9]{3}[A-Z]{3}') );