Sevdim MONEY
! Bu değerden daha ucuz bir bayttır DECIMAL
ve hesaplamalar daha hızlı gerçekleşir, çünkü (kapakların altında) toplama ve çıkarma işlemleri esasen tamsayı işlemleridir. @ SQLMenace'in - habersiz için büyük bir uyarı olan INT
örneği, sonucun sıfır olacağı egers'e eşit olarak uygulanabilir . Ama bu integers- kullanmak için hiçbir neden var uygun .
Yani, mükemmel bir şekilde 'güvenli' ve MONEY
uğraştığınız zaman MONEY
kullanmak ve onu takip eden matematiksel kurallara göre kullanmak için uygundur ( INT
eger ile aynı ).
SQL Server MONEY
'ın bölünmesini ve çoğaltılmasını DECIMAL
s (veya FLOAT
s'ye) yükseltmesi daha iyi olurdu , ama bunu yapmayı seçmediler; ne de INT
böldüklerinde egleri FLOAT
s'ye yükseltmeyi seçmediler .
MONEY
hassas bir sorunu yoktur; Bu DECIMAL
hesaplamalar sırasında kullanılan daha büyük bir ara tür olsun sadece bu tür kullanmanın bir 'özellik' (ve aslında bu 'özellik' ne kadar uzandığından emin değilim).
Belirli bir soruyu cevaplamak için “zorlayıcı bir neden” mi? Peki, bir SUM(x)
yerde mutlak maksimum performans istiyorsanız x
ya DECIMAL
da olabilir MONEY
, o MONEY
zaman bir kenarı olacaktır.
Ayrıca, daha küçük kuzen olduğunu unutmayın SMALLMONEY
- sadece 4 bayt, ancak maksimumda 214,748.3647
- para için oldukça küçüktür - ve genellikle iyi bir uyum değildir.
Etraftaki noktayı daha büyük ara türler kullanarak kanıtlamak için, DECIMAL
aracıyı bir değişkene açıkça atarsanız , aynı sorunla karşılaşırsınız:
declare @a decimal(19,4)
declare @b decimal(19,4)
declare @c decimal(19,4)
declare @d decimal(19,4)
select @a = 100, @b = 339, @c = 10000
set @d = @a/@b
set @d = @d*@c
select @d
Üretir 2950.0000
(tamam, en azından kesilmiş DECIMAL
yerine en azından yuvarlak - MONEY
tamsayı ile aynıdır.)
DECIMAL(19, 4)
popüler bir seçim olduğunu kontrol bu da kontrol buraya kullanımına kaç ondalık basamak karar vermek Dünya Para Biçimleri, umut yardımcı olur.