2010-01-27 16 views
10

मुझे पता है कि यह एक गैर-एसक्यूएल पर्यावरण [बाद में डेटा प्रोसेसिंग, फ्रंटएंड, आप क्या है] में मामूली रूप से किया जा सकता है, लेकिन फिलहाल यह संभव नहीं है। क्या decimal(5,2) लेने का कोई तरीका है और इसे पीछे के शून्य/दशमलव बिंदुओं के बिना varchar में परिवर्तित करें? उदाहरण के लिए:क्या टी-एसक्यूएल में दशमलव प्रारूपों को प्रारूपित करने का कोई आसान तरीका है?

declare @number decimal(5,2) 
set @number = 123.00 
select cast(@number as varchar) as FormattedNumber 

और परिणाम '123.00' है। क्या इसके बजाय '123' पाने का एक (सरल) तरीका है? और इसी तरह, '123.30', '123.3' के बजाय? यह पता लगाकर यह कर सकता है कि सौवां/दसवां स्थान 0 थे और मैन्युअल रूप से अक्षर को ट्रिम कर रहे थे, लेकिन मैं जानना चाहता था कि क्या एक और अधिक शानदार समाधान था।

+3

मैं डाटाबेस से डेटा को वापस कर दूंगा, और स्वरूपण को फ्रंट-एंड तक छोड़ दूंगा। क्या कोई कारण है कि आप ऐसा क्यों नहीं कर सकते? – AdaTheDev

+1

हाँ, जैसा कि मैंने कहा था, यह वास्तव में एक विकल्प नहीं है - जैसा कि यह खड़ा है, फ्रंटेंड, सामान्य फ़ील्ड को वापस लौटने के विशेष मामलों के लिए सामान्यीकृत है (कॉलम की संख्या इत्यादि बदल सकती है), और अन्य कॉलम की आवश्यकता नहीं है प्रारूपित किया जाना चाहिए, इसलिए सबसे सरल बात यह है कि इसे सिर्फ एसक्यूएल से करना है। –

+1

SQL सर्वर 2012+ के साथ आप FORMAT() फ़ंक्शन का उपयोग कर सकते हैं। आप अपने दूसरे पैरा के रूप में '#, ##' या '#, ##। 0' का उपयोग करेंगे। msdn.microsoft.com/en-us/library/hh213505.aspx – Volvox

उत्तर

13

के बारे में क्या:

SELECT CAST(CAST(@number AS float) AS varchar(10)) 

हालांकि आप पहली बार अपने कच्चे डेटा के साथ ध्यान से यह परीक्षण कर सकते हैं।

+0

धन्यवाद! मैं उम्मीद कर रहा था कि यह कुछ आसान था। –

0

कनवर्ट फ़ंक्शन वह कर सकता है जो आप करना चाहते हैं।

ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/a87d0850-c670-4720-9ad5-6f5a22343ea8.htm 
+1

ने कोशिश की ... डेटटाइम के लिए बढ़िया, दशमलव के लिए कुछ भी नहीं –

0

मुझे यह फिर से कोशिश करते हैं ....

CREATE FUNCTION saneDecimal(@input decimal(5,2)) returns varchar(10) 
AS 
BEGIN 
DECLARE @output varchar(10) 
SET @output = CAST(@input AS varchar(10)) 

DECLARE @trimmable table (trimval char(1)) 
INSERT @trimmable VALUES ('0') 
INSERT @trimmable VALUES ('.') 

WHILE EXISTS (SELECT * FROM @trimmable WHERE trimval = CAST(SUBSTRING(@output, LEN(@output), 1) AS char(1))) 
    SET @output = LEFT(@output, LEN(@output) - 1) 

RETURN @output 
END 

GO 

SELECT dbo.saneDecimal(1.00) 
0

आप थोड़ी देर के पाश में अनुगामी शून्य पट्टी सकता है:

declare @number decimal(5,2) 
declare @str varchar(100) 
set @number = 123.00 
set @str = @number 
while substring(@str,len(@str),1) in ('0','.',',') 
    set @str = substring(@str,1,len(@str)-1) 

लेकिन जैसे AdaTheDev टिप्पणी की, यह और अधिक आसानी से है क्लाइंट-साइड किया।

0

सरल और सुरुचिपूर्ण? इतना नहीं है ... लेकिन यह है कि आप के लिए T-SQL है:

DECLARE @number decimal(5,2) = 123.00 
DECLARE @formatted varchar(5) = CAST(@number as varchar) 

SELECT 
    LEFT(
     @formatted, 
     LEN(@formatted) 
      - PATINDEX('%[^0.]%', REVERSE(@formatted)) 
      + 1 
    ) 
4

इस तरह सुंदर सरल है:

DECLARE @Number DECIMAL(5,2) 

SELECT @Number = 123.65 

SELECT FormattedNumber = CAST(CAST(@Number AS DECIMAL(3,0)) AS VARCHAR(4)) 

रिटर्न '124'।

विचार करने वाली एकमात्र बात यह है कि क्या आप ऊपर/नीचे गोल करना चाहते हैं, या बस बिना शून्य के शून्य और दशमलव बिंदु को पट्टी करना चाहते हैं; आप दूसरे मामले में डेसिमल को एक आईएनटी के रूप में डालेंगे।

-2

इसके अलावा, पुस्तकें ऑनलाइन में टी-एसक्यूएल एसटीआर फ़ंक्शन पर नज़र डालें; इसका उपयोग फ्लोट स्वरूपण के लिए किया जा सकता है और आपके मामले के लिए काम कर सकता है। किसी कारण से यह इस समस्या से संबंधित Google खोजों में नहीं आता है।

+0

हां, एक कारण है। कृपया इस प्रश्न के लिए स्वीकृत उत्तर की जांच करें। – fancyPants

0

उपयोग स्वरूप (मूल्य, प्रारूप स्ट्रिंग, संस्कृति) एसक्यूएल सर्वर 2012+

3

में समारोह T-SQL में संख्याओं का नियंत्रित स्वरूपण के लिए आप FORMAT() समारोह का उपयोग करना चाहिए। उदाहरण के लिए:

DECLARE @number DECIMAL(9,2); SET @number = 1234567.12; 
DECLARE @formatted VARCHAR(MAX); SET @formatted = FORMAT(@number, 'N0', 'en-AU'); 
PRINT @formatted; 

परिणाम होगा:

1,234,567 

FORMAT() कार्य करने के लिए तर्क हैं:

FORMAT(value, format [, culture]) 

मान तर्क आपका नंबर है। प्रारूप तर्क एक सीएलआर प्रकार स्वरूपण स्ट्रिंग है (इस उदाहरण में, मैंने "सामान्य संख्या, शून्य परिशुद्धता" निर्दिष्ट किया है)।वैकल्पिक संस्कृति तर्क आपको वांछित संस्कृति के अनुसार संख्या को प्रारूपित करने के लिए सर्वर संस्कृति सेटिंग को ओवरराइड करने की अनुमति देता है।

the MSDN ref page for FORMAT() भी देखें।

select format(@number,'0') as FormattedNumber 

बेशक प्रारूप समारोह एक nvarchar वापस आ जाएगी, और नहीं एक varchar:

0

आप SQL Server 2012 है या ग्रेटर अगर आप इस तरह प्रारूप फ़ंक्शन का उपयोग कर सकते हैं। आप एक विशिष्ट प्रकार प्राप्त करने के लिए कास्ट कर सकते हैं।

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

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