it-swarm-eu.dev

Wie behalte ich die führenden Nullen bei, wenn ich eine Zahl in diese Tabelle einfüge?

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 23 Angezeigt. 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 (d. H. 0023 Und 23)?

10
user8365

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, empfehlen wir, 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 ', müssen Sie es in ein Zeichenfeld konvertieren; char, varchar, nvarchar, nchar.

27
Grant Fritchey

In anderen Antworten wurde bereits gesagt, dass 00023 ist eine Zahl; Ich möchte nur hinzufügen, dass Sie berechnete Spalten verwenden können, um diese Zahl im benutzerdefinierten Format anzuzeigen. Zum Beispiel,

create table num_table(id int not null primary key identity(1,1),
num int, leading_zeros smallint,
constraint chk_leading_zero_nonnegative check (leading_zero>=0),
num_formatted as replicate('0',coalesce(leading_zeros,0)) +cast(num as varchar(10)));
insert into num_table(num,leading_zeros) values(23,2) ;
select num_formatted from num_table; -- output '0023'
5
a1ex07

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.

0
Jimbo