2017-11-25 214 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