2009-02-10 3 views
15

मेरे पास SQL ​​सर्वर में एक पैसा डेटा प्रकार है। मैं अपनी क्वेरी में 0.00 से 0 को कैसे सुधारूं?मैं SQL सर्वर में एक डेटा डेटाटाइप से कैसे परिवर्तित करूं?

+0

अधिक जानकारी प्रदान करें और आपको कुछ जवाब मिल सकते हैं। –

उत्तर

3

इसे आपकी मदद करने के लिए इसे कास्टिंग करेगा? पैसा दशमलव स्थानों के लिए है ...

DECLARE @test AS money 
SET @test = 3 
SELECT CAST(@test AS int), @test 
+0

हाय टीना, अब मुझे अपना अपेक्षित आउटपुट मिला है। बहुत अच्छा धन्यवाद .. :-) –

3

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

DECLARE 
    @mon1 MONEY, 
    @mon2 MONEY, 
    @mon3 MONEY, 
    @mon4 MONEY, 
    @num1 DECIMAL(19,4), 
    @num2 DECIMAL(19,4), 
    @num3 DECIMAL(19,4), 
    @num4 DECIMAL(19,4) 

    SELECT 
    @mon1 = 100, @mon2 = 339, @mon3 = 10000, 
    @num1 = 100, @num2 = 339, @num3 = 10000 

    SET @mon4 = @mon1/@mon2*@mon3 
    SET @num4 = @num1/@num2*@num3 

    SELECT @mon4 AS moneyresult, 
    @num4 AS numericresult 

आउटपुट: 2949,0000 2949,8525

अब अपने प्रश्न (यह एक छोटे अस्पष्ट था), पैसा डेटाप्रकार हमेशा दशमलव बिंदु के बाद दो स्थानों पर है जवाब देने के लिए। यदि आप आंशिक भाग नहीं चाहते हैं या int में कनवर्ट नहीं करते हैं तो पूर्णांक डेटाटाइप का उपयोग करें।

शायद आप दशमलव या न्यूमेरिक डेटाटाइप का उपयोग करना चाहते हैं?

+1

माइक्रोसॉफ्ट डायनेमिक्स पैसे डेटा प्रकार का उपयोग करता है। मैंने आज देखा। –

+2

यह वास्तव में कितना मान्य है कि यह वास्तव में $ 450.50 * $ 32.76 करना चाहता है, मैं किसी भी समय सोचने के लिए यहां बैठ गया था, मैं वास्तव में एक साथ कई धन मूल्यों को एक साथ करना चाहता हूं, या उन्हें विभाजित करना चाहता हूं। मैंने आपके उदाहरण एसक्यूएल का इस्तेमाल किया और */का उपयोग करने के लिए + - और यहां तक ​​कि उन्हें * और/और प्रत्येक मिलान के मानों को भी लपेट लिया। –

+0

इस उत्तर पर विस्तृत टिप्पणियों के लिए, [यह उत्तर] देखें (http://stackoverflow.com/questions/582797/should-you-choose-the-money-or-decimalx-y-datatypes-in-sql- सर्वर) –

0

यह मेरे लिए एक फॉर्मेटिंग मुद्दा जैसा दिखता है।
जहां तक ​​SQL सर्वर का मनी प्रकार संबंधित है 0 == 0.00

यदि आप 0 सी # में प्रदर्शित करने की कोशिश कर रहे हैं तो 0.00 आपको इसे एक स्ट्रिंग में परिवर्तित करना चाहिए, और इसे इच्छित रूप में प्रारूपित करना चाहिए। (या इसे छोटा कर देते।)

24

सामान्य पैसे रूपांतरण व्यक्ति पैसे को सुरक्षित करेगा:

SELECT convert(varchar(30), moneyfield, 1) 

पिछले पैरामीटर का फैसला करता है क्या उत्पादन प्रारूप की तरह दिखता है:

0 (डिफ़ॉल्ट) कोई अल्पविराम के लिए हर तीन अंक दशमलव बिंदु के बाएं, और दशमलव बिंदु के दाईं ओर दो अंक; उदाहरण के लिए, 4235.98।

1 दशमलव बिंदु के बाईं ओर प्रत्येक तीन अंक कम करता है, और दशमलव बिंदु के दाईं ओर दो अंक; उदाहरण के लिए, 3,510.9 2।

2 दशमलव बिंदु के बाईं ओर प्रत्येक तीन अंक नहीं, और दशमलव बिंदु के दाईं ओर चार अंक; उदाहरण के लिए, 4235.98 9 1।

आप पैसे काटना, और पाउंड में गिनती, आप पास पाउंड करने के लिए राउंडिंग उपयोग कर सकते हैं चाहते हैं, सबसे कम पूरे पाउंड, या छत से फर्श पाउंड पूर्णांक बनाना:

SELECT convert(int, round(moneyfield, 0)) 
SELECT convert(int, floor(moneyfield)) 
SELECT convert(int, ceiling(moneyfield)) 
+0

यह काम करेगा यदि आप सभी पैनी मूल्यों को त्यागना चाहते हैं, न कि जब यह 0.00 है। इसके लिए मेरा जवाब देखें। –

0

ऐसा लगता है पैसे डेटाटाइप की अंतर्निहित सीमाओं के बावजूद, यदि आप पहले से ही इसका उपयोग कर रहे हैं (या इसे मेरे पास विरासत में मिला है) तो आपके प्रश्न का उत्तर है, डेसिमल का उपयोग करें।

-1

आप या तो इस्तेमाल कर सकते हैं

SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2) 

या

SELECT CurrencyNoDecimals = '$'+ LEFT(CONVERT(varchar, @MoneyValue,1),  
     LEN (CONVERT(varchar, @MoneyValue,1)) - 2) 
0

आप इस तरह की कोशिश कर सकते हैं:

SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2) 
1

मैं इस approach प्रत्यक्ष और उपयोगी पाया।

CONVERT (VARCHAR (10) परिवर्तित (पैसे, FIELDNAME)) मूल्य

0

के रूप में मैं भी इस मुद्दे था, और उस पर थोड़ी देर के लिए ऊपर फिसल गया था। मैं 0.00 को 0 के रूप में प्रदर्शित करना चाहता था और अन्यथा दशमलव बिंदु रखना चाहता था। निम्नलिखित काम नहीं किया:

CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), Amount, 1) ELSE Amount END 

क्योंकि परिणामी कॉलम को एक पैसा कॉलम होना पड़ा था। यह हल करने के लिए निम्नलिखित

CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), '0', 1) ELSE CONVERT (VARCHAR(30), Amount, 1) END 

यह मायने रखता काम किया क्योंकि मेरी अंतिम गंतव्य स्तंभ एक VARCHAR (30) था, और उस स्तंभ के उपभोक्ताओं बाहर त्रुटि होगा अगर एक राशि '0' के बजाय था '0.00'।

संबंधित मुद्दे