2016-04-26 21 views
0

ich für ein Bankkonto einer Tabelle in SQL habenWie kann der Datentyp in SQL auf 6-stellige Zahlen beschränkt werden?

CREATE TABLE (
    name VARCHAR(100), 
    bsb INTEGER, 
    account_num INTEGER, 
    PRIMARY KEY (bsb, account_num) 
); 

Wie platziere ich eine Einschränkung, die BSB nur ganze Zahlen beschränken wird, die 6 Ziffern einschließlich 000.000 den ganzen Weg bis 999.999 haben? Brauche ich eine Einschränkung oder einen anderen Datentyp?

Ich weiß, dass ich diese Überprüfung Rückhalt zu tun, um die Größe eines int auf 6 Ziffern CONSTRAINT Bank_BSB_CHK CHECK (BSB < 999999) zu begrenzen, aber ein BSB kann mit 0 beginnen, muss aber nur 6 Ziffern lang sein.

+2

Wollen Sie sagen, Sie möchten, dass bsb 000000 für 0 ist? Ich bin mir nicht sicher, ob das mit ganzen Zahlen eine Bedeutung hat. Wäre nicht varchar (6) dafür besser? – PeterTheLobster

+2

Wenn Sie führende Nullen möchten, würde ich einen Char-Datentyp verwenden. (Beschränkung sicher Länge 6 und nur Ziffern zu machen.) – jarlh

+1

ich d setzen‘eine Einschränkung <999999 und lassen Sie den vorderen Ende nimmt Kern der Zugabe von führenden' 0's, wenn sie fehlt, um sicherzustellen, Sie haben 6 Stellen. Oder verwende den Datentyp 'char'. – Utsav

Antwort

1

da die Daten eine Folge von 6 Ziffern ohne mathematische Bedeutung ist, ist es besser, einen CHAR(6) Datentyp zu verwenden und eine Beschränkung auf dem Muster setzt die bsb nehmen. Dies wäre die korrekte Einschränkung, um das Muster auf 6 Ziffern zu begrenzen.

CONSTRAINT Bank_Account_BSB_CHK CHECK (bsb SIMILAR TO '[[:digit:]]{6}') 
+0

Ich denke, das funktioniert in Oracle, nicht in MSSQL. –

+1

Es funktioniert in PostgreSQL von denen die Frage als markiert – joshuatvernon

2

Eine Ganzzahl hat kein festes Format, daher haben 000001 und 1 denselben Wert. Also, wenn Sie wirklich eine ganze Zahl wollen, dann ist die richtige Einschränkung ist CHECK (BSB >= 0 AND BSB <= 999999) (beachten Sie, dass Sie in Ihrer Frage einen Zaun-post-Fehler hatte, mit < nicht <=).

Wenn Ihre Daten tatsächlich eine Folge von 6 Ziffern ohne mathematische Bedeutung sind, wie eine Telefonnummer, ist es wahrscheinlich besser, einen String-Datentyp zu verwenden und ihn nach Mustern zu beschränken. Auf diese Weise müssen Sie sich bei der Anzeige der Daten keine Gedanken darüber machen, sie neu zu formatieren.

Eine einigermaßen tragbar Einschränkung wäre den SIMILAR TO Operator zu verwenden (ich weiß nicht, wie weit implementiert ist, aber es ist offensichtlich in dem SQL-Standard), die einen regulären Ausdruck verwendet:

CHECK (BSB SIMILAR TO '[0-9]{6}') 
Verwandte Themen