2017-11-25 268 views
1

我想写一个约束模式只允许以下:如下字符串:SQL DB2 CHECK约束PATTERN

  • “+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]' 

不是真的漂亮,但希望它的工作。有什么建议么? 谢谢!

+0

8-10位数字不是7-9,我的错误! – Bermie

+1

Db2 11.1允许正则表达式 - 如果您在Linux,Unix或Windows上,这将解决您的问题。退房regexp_like - https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061494.html – MichaelTiefenbacher

+0

谢谢 - 但我是仍然想知道为什么上述解决方案不起作用。 – Bermie

回答

1

如果您在Linux/Unix Windows上运行的DB2版本11.1,然后再尝试这样的事:

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}$')) 
); 

您可以使用this website来测试和解释的正则表达式。

+0

没有特殊含义,或者如果使用9.7或更高版本,可以通过调用xquery函数来使用regex。 – AngocA