Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL DB2检查约束模式_Sql_Db2_Check Constraints - Fatal编程技术网

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函数来使用正则表达式。