Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

मौद्रिक मूल्यों को संग्रहीत करने के लिए मुझे किस डेटा-प्रकार का उपयोग करना चाहिए?

पपुचिनो,

मैं पैसे और स्मॉलमनी के प्रकारों की अनुशंसा नहीं करता, जब तक कि आप निश्चित न हों कि केवल अंकगणित जो आप करने की योजना बना रहे हैं वह है जोड़ और घटाव। यदि आप विनिमय दरों, प्रतिशत आदि से निपट रहे हैं, तो आप इन प्रकारों के साथ वास्तविक समस्याओं का जोखिम उठाते हैं।

यहां सिर्फ एक छोटा सा उदाहरण दिया गया है जो आपको पैसे, दशमलव और फ्लोट के बीच अंतर दिखाता है जब विभाजन शामिल होता है। ऐसे उदाहरणों के साथ आना संभव है जहां अंतर बहुत अधिक नाटकीय हो।

declare @m1 money, @m2 money, @m3 money
declare @d1 decimal(19,4), @d2 decimal(19,4), @d3 decimal(19,4)
declare @f1 float, @f2 float, @f3 float;
set @m1 = 1.00;
set @m2 = 345.00;
set @m3 = @m1/@m2;
set @d1 = 1.00;
set @d2 = 345.00;
set @d3 = @d1/@d2;
set @f1 = 1.00;
set @f2 = 345.00;
set @f3 = @f1/@f2;
select @m3, @d3, @f3;

परिणाम:0.0028 0.0029 0.00289855072463768

उद्योग के आधार पर, सही डेटा प्रकार के बारे में निर्णय लेने में आपकी सहायता के लिए दिशानिर्देश या नियम हो सकते हैं। कोई एक सही उत्तर नहीं है।

जोड़ी गई टिप्पणियां:

आप सही हैं कि पैसा/पैसा पैसा नहीं होना चाहिए, लेकिन SQL सर्वर (बेवजह) ठीक उसी परिणाम का उत्पादन करता है:दो पैसे मूल्यों के भागफल से पैसा टाइप करें। यह फर्जी है, लेकिन जैसा कि आप नीचे दिए गए उदाहरण से देखते हैं, यह वही है जो आपको मिलता है, भले ही इसका कोई मतलब नहीं है:

declare @m1 money, @m2 money;
declare @d1 decimal(19,4), @d2 decimal(19,4);
set @m1 = 1.00;
set @m2 = 345.00;
set @d1 = 1.00;
set @d2 = 345.00;
select @m1/@m2, @d1/@d2

परिणाम:0.0028 0.0028985507246376811

0.0028 टाइप मनी वाला परिणाम सही परिणाम से 3-4% कम है।

बेशक, ऐसी कई स्थितियां हैं जहां आपको मुद्रा मूल्यों को विभाजित करने की आवश्यकता होती है। पैसे के प्रकार का उपयोग करने का खतरा यह है कि भागफल गलत प्रकार है (और एक उत्तर सही के करीब नहीं है)। ऐसे प्रश्नों के उदाहरण जिनके लिए मुद्रा को विभाजित करने की आवश्यकता होती है:

मान लीजिए आप 320 युआन का आदान-प्रदान करते हैं और बैंक आपको 47.3 अमेरिकी डॉलर देता है। आपको दी गई विनिमय दर क्या है?

मान लीजिए कि आप $23 का निवेश करते हैं और एक साल बाद इसकी कीमत $31 है। आपकी वापसी की प्रतिशत दर क्या है?

इन दोनों गणनाओं के लिए मुद्रा मूल्यों को विभाजित करने की आवश्यकता होती है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओवर फंक्शन द्वारा पार्टीशन बाय और ऑर्डर का उपयोग कैसे करें?

  2. फिक्स:SQL सर्वर (और SQL एज) में "रिकवरी मॉडल SIMPLE होने पर स्टेटमेंट बैकअप लॉग की अनुमति नहीं है"

  3. SQL सर्वर 2008, एक क्वेरी के साथ अलग WHERE क्लॉज

  4. एसएसआरएस - Group_Concat एक अभिव्यक्ति का उपयोग कर समतुल्य?

  5. SQL सर्वर सुरक्षा विचार