it-swarm-eu.dev

Jak si mohu zachovat přední nuly, když do této tabulky vložím číslo?

Do tabulky jsem vložil dva záznamy.

create table num(id int)
insert into num values(0023)
insert into num values(23)
select * from num

Když se na ně podívám, zobrazí se jako 23. To znamená, že SQL Server ignoruje úvodní 0s. Jaký je za tím mechanismus? Jak mohu mít SQL Server vrátit hodnoty, jak jsem je vložil (tj. 0023 a 23)?

10
user8365

0023 není číslo. Je to řetězec. 23 je číslo. SQL Server je schopen rozpoznat, že tyto extra nuly nejsou potřeba k definování čísla, takže je ignoruje. Pokud chcete do aplikace uložit hodnotu jako 0023, navrhl bych provést formátování na straně aplikace. Tímto způsobem je číslo uložené na serveru SQL stále číslo, pokud chcete provádět sčítání, agregaci nebo jiné výpočty. Pokud ji opravdu musíte uložit jako '0023 ', musíte ji převést do znakového pole; char, varchar, nvarchar, nchar.

27
Grant Fritchey

V jiných odpovědích již bylo řečeno, že 00023 je číslo; Chci jen dodat, že můžete pomocí vypočítaných sloupců zobrazit toto číslo pomocí vlastního formátu. Například,

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 je číslo, ale datové typy int a další čísla neukládají počáteční nuly, protože neexistuje žádný matematický důvod.

Pokud potřebujete ukládat počáteční nuly, použijte řetězcový datový typ jako, char, varchar atd

0
Jimbo