SQL DB2检查约束模式
我正在尝试编写一个约束模式,它只允许以下内容:一个字符串,如下所示:SQL DB2检查约束模式,sql,db2,check-constraints,Sql,Db2,Check Constraints,我正在尝试编写一个约束模式,它只允许以下内容:一个字符串,如下所示: “+55” 一个空格 120到150之间的数字 一个空格 7-9位 我尝试了很多方法,但没有一种方法能像我希望的那样奏效,最后我做了这样的事情: ALTER TABLE KUNDENKONTAKTDATEN ADD CONSTRAINT VariableA_Check CHECK ( VariableA Like '+55 1[2-4][0-9] [0-9][0-9][0-9][0-9][0-9][0-9][0-9][
- “+55”
- 一个空格
- 120到150之间的数字
- 一个空格
- 7-9位
ALTER TABLE KUNDENKONTAKTDATEN
ADD CONSTRAINT
VariableA_Check CHECK (
VariableA Like '+55 1[2-4][0-9] [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
Or VariableA Like '+55 1[2-4][0-9] [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
Or VariableA Like '+55 1[2-4][0-9] [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
Or VariableA Like '+55 150 [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
Or VariableA Like '+55 150 [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
Or VariableA Like '+55 150 [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
create table tester (
mycol varchar(50) constraint bad_value check (regexp_like(mycol, '^\+55 (12[0-9]|13[0-9]|14[0-9]|150) [0-9]{8,10}$'))
);
不是很漂亮,但希望它能起作用。有什么建议吗?
谢谢大家! 如果您在Linux/Unix Windows上运行Db2 11.1版,请尝试以下操作:
ALTER TABLE KUNDENKONTAKTDATEN
ADD CONSTRAINT
VariableA_Check CHECK (
VariableA Like '+55 1[2-4][0-9] [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
Or VariableA Like '+55 1[2-4][0-9] [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
Or VariableA Like '+55 1[2-4][0-9] [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
Or VariableA Like '+55 150 [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
Or VariableA Like '+55 150 [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
Or VariableA Like '+55 150 [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
create table tester (
mycol varchar(50) constraint bad_value check (regexp_like(mycol, '^\+55 (12[0-9]|13[0-9]|14[0-9]|150) [0-9]{8,10}$'))
);
你可以用它来测试和解释正则表达式。8-10位而不是7-9位,我错了!DB211.1允许正则表达式——如果您在Linux、Unix或Windows上,这将解决您的问题。查看regexp_like-谢谢-但我仍然想知道为什么上面的解决方案不起作用。好的,我尝试了正则表达式解决方案,但它根本不起作用,因为regexp_like在Check-constraints中无效。为什么不使用substring作为SUBSTR(VariableA,1,3)='+55'和SUBSTR(VariableA,4,1)=''和SUBSTR(VariableA,5,3)>'120'和SUBSTR(VariableA,5,3)<'150'和SUBSTR(VariableA,8,1)=''和SUBSTR(VariableA,9,1)>'7'和SUBSTR(VariableA,9,1)<'9',或者如果使用9.7或更高版本,可以通过调用xquery函数来使用正则表达式。