खैर, मुझे पसंद है MONEY
! यह बाइट की तुलना में सस्ता है DECIMAL
, और गणना जल्दी करते हैं क्योंकि (कवर के तहत) जोड़ और घटाव संचालन अनिवार्य रूप से पूर्णांक ऑपरेशन हैं। @ SQLMenace का उदाहरण- जो अनजान लोगों के लिए एक बड़ी चेतावनी है - समान रूप से INT
ईगर्स पर लागू किया जा सकता है , जहां परिणाम शून्य होगा। लेकिन पूर्णांक का उपयोग नहीं करने का कोई कारण नहीं है - जहां उपयुक्त हो ।
तो, यह पूरी तरह से 'सुरक्षित' है और MONEY
जब आप जो व्यवहार कर रहे हैं उसका उपयोग करना उचित है MONEY
और गणितीय नियमों के अनुसार इसका उपयोग करें कि यह ( INT
ईगर के समान )।
यह बेहतर होता है अगर एसक्यूएल सर्वर विभाजन और के गुणन पदोन्नत MONEY
में s ' DECIMAL
s (या FLOAT
- संभवतः, लेकिन वे ऐसा करने के लिए नहीं चुना था रों?); और न ही उन्हें विभाजित करते समय INT
ई को बढ़ावा देने के लिए चुना FLOAT
।
MONEY
कोई सटीक मुद्दा नहीं है; कि DECIMAL
एक बड़ा मध्यवर्ती गणना के दौरान इस्तेमाल किया प्रकार सिर्फ एक है कि प्रकार का उपयोग करने का 'विशेषता है के लिए मिलता है (और मैं वास्तव में यकीन है कि कितनी दूर है कि' सुविधा 'का विस्तार नहीं कर रहा हूँ)।
विशिष्ट प्रश्न का उत्तर देने के लिए, "सम्मोहक कारण"? ठीक है, अगर आप चाहते हैं कि अधिकतम अधिकतम प्रदर्शन SUM(x)
जहां या x
तो हो सकता है , तो एक बढ़त होगी।DECIMAL
MONEY
MONEY
इसके अलावा, यह मत भूलना छोटा चचेरा भाई, - SMALLMONEY
4 बाइट्स, लेकिन यह अधिकतम करता है 214,748.3647
- जो पैसे के लिए बहुत छोटा है - और इसलिए अक्सर एक अच्छा फिट नहीं होता है।
बड़े मध्यवर्ती प्रकारों का उपयोग करते हुए बिंदु को साबित करने के लिए, यदि आप मध्यवर्ती को स्पष्ट रूप से एक चर में निर्दिष्ट करते हैं, तो एक DECIMAL
ही समस्या आती है:
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
प्रोड्यूस 2950.0000
(ठीक है, इसलिए कम से कम DECIMAL
राउंड किए गए बजाय MONEY
एक पूर्णांक के समान होगा)।
DECIMAL(19, 4)
है एक लोकप्रिय विकल्प जाँच इस भी जाँच यहाँ विश्व मुद्रा का प्रयोग करना है कि कितने दशमलव स्थानों तय करने के लिए, आशा में मदद करता है।