2017-11-25 1 views
1

Ich versuche, ein Zwang Muster zu schreiben, die nur folgende erlaubt: eine Zeichenfolge wie folgt:SQL DB2 CHECK-CONSTRAINT MUSTER

  • '+55'
  • ein Leerzeichen
  • eine Reihe zwischen 120 und 150
  • ein Leerzeichen
  • 7-9 Ziffern.

habe ich versucht, eine Menge Möglichkeiten, aber nichts davon, die Art und Weise arbeitete ich gehofft und am Ende so etwas wie dies zu tun:

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]' 

Nicht wirklich hübsch, aber gehofft, dass es funktionieren würde. Irgendwelche Vorschläge? Vielen Dank!

+0

8-10 Ziffern nicht 7-9, mein Fehler! – Bermie

+1

Db2 11.1 erlaubt reguläre Ausdrücke - dies würde Ihr Problem lösen, wenn Sie unter Linux, Unix oder Windows sind. Check out regexp_like - https://www.ibm.com/support/knowledgecenter/de/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061494.html – MichaelTiefenbacher

+0

danke - aber ich bin Ich frage mich immer noch, warum die obige Lösung nicht funktionieren würde. – Bermie

Antwort

1

Wenn DB2 Version 11.1 auf Linux/Unix Windows ausgeführt wird, dann so etwas wie dies versuchen:

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

Sie this website können den regulären Ausdruck zu testen und zu erklären.

+0

Oder wenn Sie 9.7 oder höher verwenden, können Sie regex verwenden, indem Sie eine xquery Funktion aufrufen. – AngocA