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 (yaitu 0023
dan 23
)?
sql-server
sql-server-2008
pengguna8365
sumber
sumber
id
harus bertipeVARCHAR
atau serupa.Jawaban:
0023
bukan angka. Ini sebuah string.23
adalah nomornya. 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 mengubahnya menjadi bidang karakter; char, varchar, nvarchar, nchar.sumber
id
sebagaiVARCHAR
atau hanya menyisipkan 23 alih-alih 00230023
adalah string maka simpan sebagai string. Jika tidak, maka simpan sebagai INT dan lupakan angka nol di depannya.Sudah dikatakan dalam jawaban lain yaitu
00023
angka; Saya hanya ingin menambahkan bahwa Anda dapat menggunakan kolom yang dihitung untuk menunjukkan angka itu menggunakan format khusus. Sebagai contoh,sumber
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
sumber
INT
adalah fixed-length (seperti 32 bit) dan notasi biner digunakan untuk menyimpannya, maka angka nol di depan memang disimpan. Tetapi mereka tidak ditampilkan dalam output.15
- ini hanya membutuhkan satu digit dalam heksadesimalF
,. Mereka sudah memiliki jumlah "nol terkemuka" yang berbeda. 2147483647 adalah 10 digit, tetapi dalam hex itu hanya 7FFFFFFF atau 8 digit.