SQL-Identität mit führenden aufgefüllten Nullen

8

Ich habe eine Spalte als Identität in meiner Tabelle markiert

%Vor%

Ich muss die Identitätsspalte als 001,002,003 usw. erhöhen.

Die Datenbank zeigt, dass sie als 1,2,3 usw. einfügt.

Wie kann das gemacht werden?

    
Innova 07.08.2010, 05:49
quelle

7 Antworten

6

Wenn Sie Ihre Spalte number mit führenden Nullen anzeigen möchten, füllen Sie sie einfach in Ihrer SELECT -Anweisung auf. Es ist eine Zahl, die NICHT mit führenden Nullen als Ganzzahl gespeichert wird.

%Vor%

3 ist die Anzahl der Zeichen, die Sie in der Ausgabe anzeigen möchten.

    
p.campbell 07.08.2010, 06:10
quelle
15

Wie die anderen bereits zu Recht angemerkt haben - ein INT hat niemals führende Nullen - er enthält nur den Wert, das ist alles (und das ist gut so).

Wenn Sie zusätzliche Formatierungen benötigen, können Sie Ihrer Tabelle immer eine berechnete Spalte hinzufügen, etwa:

%Vor%

Auf diese Weise wird Ihre INT IDENTITY als INT verwendet und enthält immer den numerischen Wert, während DisplayNumber enthält 001, 002, ... 014, 015, ..... und so weiter - automatisch, immer auf dem neuesten Stand.

Da es ein persistierendes Feld ist, ist es jetzt Teil Ihrer Tabelle, und Sie können darauf abfragen und sogar einen Index anlegen, um Abfragen schneller zu machen:

%Vor%

Und natürlich könnten Sie fast jede Formatierung in der Definition Ihrer berechneten Spalte verwenden, also könnten Sie auch ein Präfix oder etwas hinzufügen:

%Vor%

In diesem Fall wäre Ihr DisplayNumber also ABC-001, ABC-002, ... und so weiter.

Sie erhalten das Beste aus beiden Welten - Sie behalten Ihre INT IDENTITY, die numerisch ist und automatisch von SQL Server erhöht wird, und Sie können ein Anzeigeformat beliebig definieren und jederzeit verfügbar haben.

    
marc_s 07.08.2010 06:52
quelle
3

Wenn Sie sowohl die automatisch inkrementierende Zahl (die nur eine Zahl sein kann) als auch eine alphabetische Darstellung der Zahl benötigen, können Sie berechnete Spalten betrachten.

Hier sind ein paar Links, um Sie zum Laufen zu bringen:

kbrimington 07.08.2010 06:51
quelle
2

Warum brauchen Sie das? Als Integer ist 001 das gleiche wie 1. Wenn Sie wollen, dass das für Display- oder andere Zwecke ist, erstellen Sie eine andere Spalte und führen Sie Ihre Arbeit dort (Sie können es als Teil eines Triggers auf der Tabelle, bei der Einfügung, die aussieht in der neu eingefügten Zeile und erstellt den Eintrag in der Spalte entsprechend.

    
Noon Silk 07.08.2010 05:52
quelle
1

Ich habe eine Tabelle, in der ich eine Ganzzahl speichere, aber die Benutzer wollen es als XXX sehen, auch wenn es Nullen hat, also habe ich diesen Code geschrieben

%Vor%     
DForck42 09.08.2010 13:55
quelle
1

Hier ist eine andere Methode:

%Vor%

Nicht so viele Datenduplikationen (?) wie das Hinzufügen einer Spalte zur Tabelle und keine Notwendigkeit, die Spalte in der SELECT-Anweisung anzugeben.

    
Robert Christopher 13.10.2011 10:15
quelle
0
  

Ich brauche die Identity-Spalte   erhöht als 001,002,003 usw.

     

Die Datenbank zeigt, dass es ist   einfügen als 1,2,3 usw.

SQL-Datenbanken speichern Werte, nicht die Literale, die Sie zum Schreiben dieser Werte verwendet haben. 002 ist 2. Genau wie 1 + 1 ist 2. Würdest du erwarten, dass SELECT 1 + 1 die Zeichenfolge "1 + 1" anstelle von 2 anzeigt?

Wenn die führenden Nullen in Ihrer Spalte gespeichert werden sollen, müssen Sie einen Zeichentyp verwenden. Aber dann können Sie AUTOINCREMENT / IDENTITY nicht verwenden.

Was Sie wahrscheinlich wirklich wollen, ist etwas wie printf("%03d", number) im Programm, das aus der Datenbank liest.

    
dan04 07.08.2010 07:03
quelle