2016-09-11 2 views
0

Ich möchte eine Zahl beschränken, so dass es streng 8 Ziffern hat .... nicht mehr und nicht weniger. Es gibt führende Nullen, wenn die Nummer weniger als 8 Ziffern lang ist.Constrain Ziffern postgresql

ALTER TABLE mytable ADD CONSTRAINT digit_chk CHECK (mynum ~ '[0-9]{8}'); 

jedoch die obige Syntax verwendet wird, ist es kein Fehler erzeugt wird, wenn ich eine Zahl mit 9 Ziffern einfügen:

INSERT INTO mytable (mynum) VALUES ('123456789'); 

Warum?

Ich sollte beachten, dass ein Fehler generiert wird, wenn ich weniger als 8 Ziffern einfüge.

+1

Reicht es aus, eine numerische Spalte mit '(mynum> = 10000000 AND mynum <= 99999999)' zu haben? – Glenn

+0

Nein. Weil die Nummer führende Nullen haben muss. – Haydos

+1

Padding führende Nullen ist in der Regel eine Präsentationsfunktion. Aber vielleicht nicht in deinem Fall. – Glenn

Antwort

2

Verwendung:

ALTER TABLE mytable ADD CONSTRAINT digit_chk CHECK (mynum ~ '^[0-9]{8}$'); 

Per the documentation:

Im Gegensatz zu LIKE Muster ist ein regulärer Ausdruck passen überall innerhalb eines Strings erlaubt, es sei denn, der reguläre Ausdruck explizit auf den Anfang oder das Ende verankert ist der Schnur.

+0

Danke Klin! Gibt es ein "LIKE-Muster", das dasselbe erreichen würde, ohne dass ich den regulären Ausdruck verankern müsste? – Haydos

+0

Nein, das kannst du nicht mit 'like' machen. – klin

Verwandte Themen