Bagaimana cara menyimpan nilai desimal di SQL Server?

272

Saya mencoba mencari tahu tipe data desimal dari kolom di SQL Server. Saya harus bisa menyimpan nilai seperti 15.5, 26.9, 24.7, 9.8, dll

Saya ditugaskan decimal(18, 0)ke tipe data kolom tetapi ini tidak memungkinkan saya untuk menyimpan nilai-nilai ini.

Apa cara yang tepat untuk melakukan ini?

Alex
sumber

Jawaban:

513

DECIMAL(18,0) akan memungkinkan 0 digit setelah titik desimal.

Gunakan sesuatu seperti DECIMAL(18,4)yang seharusnya baik-baik saja!

Itu memberi Anda total 18 digit , 4 di antaranya setelah titik desimal (dan 14 sebelum titik desimal).

marc_s
sumber
@marc_s, Apakah ada pula untuk menyimpan nilai "4.5" di mana datatype kolom adalah desimal (4,2)? Ketika saya memasukkan nilai, itu akan diubah menjadi "4,50"
Arun
1
@ ArunkumarTK: decimal(4,2)memungkinkan 2 digit sebelum dan 2 digit setelah titik desimal. "4,5" dapat disimpan tanpa masalah - dan secara numerik, "4,5" dan "4,50" identik
marc_s
3
@ArunkumarTK: MENGAPA mereka harus berbeda ?? Keduanya "empat setengah" - nilainya IS SAMA . Dan TIDAK jangan gunakan a varcharuntuk menyimpan nilai desimal !!
marc_s
1
Saya tahu ini adalah diskusi lama tetapi bukankah itu '4.05' dan '4.5' dalam hal ini @ArunkumarTK.
Shelby115
2
Ya, mengapa 18 sangat populer (misalnya default (18,0)) ketika 18 dan 19 menggunakan 9 byte ?
xr280xr
136

Yang harus Anda gunakan adalah sebagai berikut:

DECIMAL(m,a)

m adalah jumlah digit total desimal Anda.

a adalah jumlah maksimal digit yang dapat Anda miliki setelah titik desimal.

http://www.tsqltutorials.com/datatypes.php memiliki deskripsi untuk semua tipe data.

DForck42
sumber
3
Ini biasanya dilambangkan sebagai DECIMAL (p, s) di mana p berarti presisi (angka maksimum yang diperbolehkan dalam angka) dan s adalah singkatan untuk skala (angka maksimum yang diizinkan setelah titik desimal).
RBT
Tautannya
43

Pengaturan untuk Decimalketepatan dan skala atau dalam bahasa normal, berapa banyak angka yang dapat dimiliki suatu angka dan berapa banyak angka yang Anda ingin miliki di sebelah kanan titik desimal.

Jadi jika Anda memasukkannya PIke Decimal(18,0)dalamnya akan dicatat sebagai 3?

Jika Anda memasukkannya PIke dalam, Decimal(18,2)itu akan dicatat sebagai 3.14?

Jika Anda menempatkan PIke dalam Decimal(18,10)disimpan sebagai 3.1415926535.

Rubens Mariuzzo
sumber
35

Untuk sebagian besar waktu, saya menggunakan desimal (9,2) yang mengambil penyimpanan paling sedikit (5 byte) dalam tipe desimal sql.


Presisi => Penyimpanan byte

  • 1 - 9 => 5
  • 10-19 => 9
  • 20-28 => 13
  • 29-38 => 17

Ia dapat menyimpan dari 0 hingga 9 999 999,99 (7 ​​digit di depan + 2 digit di belakang titik desimal = total 9 digit), yang cukup besar untuk sebagian besar nilai.

Hnin Htet Htet Aung
sumber
9

Anda bisa mencoba ini

decimal(18,1)

Panjang angka harus total 18. Panjang angka setelah titik desimal harus hanya 1 dan tidak lebih dari itu.

Biddut
sumber
6

Dalam MySQL DB decimal(4,2)memungkinkan hanya memasukkan total 4 digit. Seperti yang Anda lihat decimal(4,2), itu berarti Anda dapat memasukkan total 4 digit dari mana dua digit dimaksudkan untuk menjaga setelah titik desimal.

Jadi, jika Anda memasukkan 100.0 dalam database MySQL, itu akan menampilkan kesalahan seperti "Nilai Out of Range untuk kolom".

Jadi, Anda dapat memasukkan dalam kisaran ini saja: dari 00.00 hingga 99.99.

Raja Selesai
sumber
2
Mengapa ini relevan sementara pertanyaan yang ditentukan dengan jelas Microsoft SQL Server?
JCKödel
3

Jawaban lainnya benar. Dengan asumsi contoh Anda mencerminkan berbagai kemungkinan apa yang Anda inginkan DECIMAL(3, 1). Atau, DECIMAL(14, 1)akan memungkinkan total 14 digit. Adalah tugas Anda untuk memikirkan apa yang cukup.

Matthew Flaschen
sumber
1
request.input("name", sql.Decimal, 155.33)              // decimal(18, 0)
request.input("name", sql.Decimal(10), 155.33)          // decimal(10, 0)
request.input("name", sql.Decimal(10, 2), 155.33)       // decimal(10, 2)
freya
sumber