Ich habe zwei Datensätze in eine Tabelle eingefügt.
create table num(id int)
insert into num values(0023)
insert into num values(23)
select * from num
Wenn ich sie abfrage, werden sie alle als angezeigt 23
. Dies bedeutet, dass SQL Server die führenden Nullen ignoriert. Was ist der Mechanismus dahinter? Wie kann SQL Server die Werte beim Einfügen zurückgeben (dh 0023
und 23
)?
sql-server
sql-server-2008
user8365
quelle
quelle
id
sollten sie vom TypVARCHAR
oder ähnlich sein.Antworten:
0023
ist keine Zahl. Es ist eine Schnur.23
ist die Nummer. SQL Server kann erkennen, dass diese zusätzlichen Nullen nicht benötigt werden, um die Nummer zu definieren, und ignoriert sie daher. Wenn Sie der Anwendung einen Wert als 0023 anzeigen möchten, würde ich empfehlen, die Formatierung auf der Anwendungsseite vorzunehmen. Auf diese Weise ist die in SQL Server gespeicherte Nummer immer noch eine Nummer, wenn Sie Additionen, Aggregationen oder andere Berechnungen durchführen möchten. Wenn Sie es wirklich als '0023
' speichern müssen, müssen Sie es in ein Zeichenfeld konvertieren. char, varchar, nvarchar, nchar.quelle
id
alsVARCHAR
oder nur 23 anstelle von 0023 einfügen0023
es sich um eine Zeichenfolge handelt, speichern Sie sie als Zeichenfolge. Wenn dies nicht der Fall ist, speichern Sie es als INT und vergessen Sie die führenden Nullen.Es wurde bereits in anderen Antworten gesagt, dass
00023
es sich um eine Zahl handelt; Ich möchte nur hinzufügen, dass Sie berechnete Spalten verwenden können, um diese Zahl im benutzerdefinierten Format anzuzeigen. Beispielsweise,quelle
0023 ist eine Zahl, aber die Datentypen int und andere Zahlen speichern keine führenden Nullen, da es keinen mathematischen Grund dafür gibt.
Wenn Sie führende Nullen speichern müssen, verwenden Sie einen Zeichenfolgendatentyp wie char, varchar usw.
quelle
INT
es sich um eine feste Länge (wie 32 Bit) handelt und zum Speichern eine binäre Notation verwendet wird, werden tatsächlich führende Nullen gespeichert. Sie werden jedoch nicht in der Ausgabe angezeigt.15
dies nimmt nur eine hexadezimale ZifferF
. Sie haben bereits eine andere Anzahl von "führenden Nullen". 2147483647 besteht aus 10 Ziffern, aber in hexadezimaler Schreibweise sind das nur 7FFFFFFF oder 8 Ziffern.