it-swarm.asia

Bagaimana cara saya menjaga angka nol di depan saat saya memasukkan angka ke dalam tabel ini?

Saya telah memasukkan dua catatan ke dalam tabel.

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

Ketika saya meminta mereka, mereka semua ditampilkan sebagai 23. Ini berarti bahwa SQL Server mengabaikan 0s terkemuka. Apa mekanisme di balik itu? Bagaimana saya bisa meminta SQL Server mengembalikan nilai saat saya memasukkannya (mis. 0023 dan 23)?

10
user8365

0023 bukan angka. Ini sebuah string. 23 adalah angka. SQL Server dapat mengenali bahwa angka nol tambahan tersebut tidak diperlukan untuk menentukan angka, sehingga mengabaikannya. Jika Anda ingin menghilangkan nilai sebagai 0023 ke aplikasi, saya sarankan melakukan pemformatan di sisi aplikasi. Dengan begitu angka yang tersimpan di SQL Server masih merupakan angka jika Anda ingin melakukan penambahan, agregasi, atau perhitungan lainnya. Jika Anda benar-benar harus menyimpannya sebagai '0023 ', Anda perlu mengonversinya ke bidang karakter; char, varchar, nvarchar, nchar.

27
Grant Fritchey

Sudah dikatakan dalam jawaban lain bahwa 00023 adalah angka; Saya hanya ingin menambahkan bahwa Anda dapat menggunakan kolom yang dihitung untuk menunjukkan nomor itu menggunakan format khusus. Sebagai contoh,

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 adalah angka tetapi int dan tipe data angka lainnya tidak menyimpan angka nol di depan karena tidak ada alasan matematika untuk melakukannya.

Jika Anda perlu menyimpan angka nol terkemuka, gunakan tipe data string seperti, char, varchar dll

0
Jimbo