Ondalık değerler SQL Server'da nasıl saklanır?


272

SQL Server'da bir sütunun ondalık veri türünü anlamaya çalışıyorum. 15.5, 26.9, 24.7, 9.8 vb.Gibi değerleri depolayabilmem gerekiyor.

decimal(18, 0)Sütun veri türüne atandım , ancak bu, bu değerleri depolamama izin vermiyor.

Bunu yapmanın doğru yolu nedir?

Yanıtlar:


513

DECIMAL(18,0) ondalık noktadan sonra 0 basamağa izin verir.

DECIMAL(18,4)Bunun yerine iyi bir şey yapması gereken bir şey kullanın !

Bu , 4 ondalık noktadan sonra (ve ondalık noktadan 14 önce) toplam 18 basamak verir .


@marc_s, Sütun veri türünün ondalık (4,2) olduğu yerde "4.5" değerini saklamak için yine de var mı? Değeri eklediğimde, "4.50" olarak değiştiriliyor
Arun

1
@ArunkumarTK: decimal(4,2)Ondalık noktadan önce 2 ve ondalık noktadan sonra 2 basamak izin verir. "4.5" sorunsuz saklanabilir - ve sayısal olarak, "4.5" ve "4.50" aynıdır
marc_s

3
@ArunkumarTK: Bunlar neden farklı olmalı? Her ikisi de "dört buçuk" - değer aynıdır. Ve HAYIRvarchar ondalık değeri saklamak için bir kullanmayın !!
marc_s

1
Bunun eski bir tartışma olduğunu biliyorum ama bu durumda '4.05' ve '4.5' bu olmazsa @ArunkumarTK.
Shelby115

2
Evet, hem 18 hem de 19 9 bayt kullandığında neden 18 bu kadar popüler (örneğin varsayılan (18,0)) ?
xr280xr

136

Kullanmanız gereken aşağıdaki gibidir:

DECIMAL(m,a)

m ondalık sayınızın sahip olabileceği toplam basamak sayısıdır.

a ondalık noktadan sonraki maksimum basamak sayısıdır.

http://www.tsqltutorials.com/datatypes.php tüm veri türleri için açıklamalara sahiptir.


3
Genellikle DECIMAL (p, s) olarak belirtilir, burada p kesinlik (bir sayıdaki izin verilen maksimum basamak) ve s ölçeği (ondalık noktadan sonraki izin verilen maksimum basamak) anlamına gelir.
RBT

Bağlantı öldü
ibrahim mahrir

43

Ayarları Decimal, hassasiyeti ve ölçeği veya normal dilde, bir sayının kaç basamağa sahip olabileceği ve ondalık noktanın sağında kaç basamak olmasını istediğinizdir.

Yani PIiçine koyarsanız Decimal(18,0)olarak kaydedilir 3?

Eğer PIiçine koyarsanız Decimal(18,2)olarak kaydedilir 3.14?

Eğer PIiçine koymak eğer Decimal(18,10)olarak kaydedilir 3.1415926535.


35

Çoğu zaman, sql ondalık türünde en az depolama (5 bayt) alan ondalık (9,2) kullanıyorum.


Precision => Depolama baytları

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

Değerlerin çoğu için yeterince büyük olan 0'dan 9 999 999,99'a (ondalık noktanın arkasında 7 basamaklı + 2 basamaklı = toplam 9 basamaklı) depolayabilir.


9

Bunu deneyebilirsin

decimal(18,1)

Sayıların uzunluğu toplam 18 olmalıdır. Ondalık noktadan sonraki sayıların uzunluğu sadece 1 olmalı ve bundan daha fazla olmamalıdır.


6

MySQL DB decimal(4,2)sadece 4 basamak girilmesine izin verir. Gördüğünüz gibi decimal(4,2), ondalık noktadan sonra tutmak için toplam iki basamak girebileceğiniz anlamına gelir.

Bu nedenle, MySQL veritabanına 100.0 girerseniz, "Sütun için Aralık Dışı Değeri" gibi bir hata gösterir.

Yani, sadece bu aralığa girebilirsiniz: 00.00 ila 99.99.


2
Soru Microsoft SQL Server açıkça belirtilirken bu neden önemlidir?
JCKödel

3

Diğer cevaplar doğrudur. Örneklerinizin varsayılması, istediğiniz şeylerin tamamını yansıtır DECIMAL(3, 1). Veya, DECIMAL(14, 1)toplam 14 hane izin verir. Neyin yeterli olduğunu düşünmek sizin işiniz.


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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.