2014-02-06 32 views
0

當我運行此查詢,它的確定:如何在使用Cast作爲數字時爲Scale傳遞參數?

select cast(round(sum(23.44324),2) as numeric(36,2)) 

但我想通過參數縮放,這樣我可以配置它(用戶)

我如何使用它像這樣:

declare @aaa int = 3 
select cast(round(sum(23.44324),@aaa) as numeric(36,@aaa)) 

請給我一個想法來解決這個問題。

我很滿意你的幫助。

謝謝。

+1

您無法在SQL Server中參數化類型規範。 –

+0

你應該接受最好的答案或者你發現最有用的答案 –

+0

@Langthang你應該接受最好的答案或者你認爲最有用的答案(在你的其他檔案中) –

回答

1

我想說,不用擔心轉換爲數字,無論如何,在四捨五入之後,任何轉換隻是格式化輸出,而格式化應該在表示層完成。

如果你真的想你的輸出具有相同的精度爲您挑選的圓形,然後只投給FLOAT

declare @aaa int = 3 
select cast(round(sum(23.44324),@aaa) as float) 

這將返回23.443,這是一樣的鑄造numeric(36, 3)反正。


附錄

正如已經指出在註釋上述方法不會增加後的0,所以36.400將縮短至36.4即使有3

雖然精度我不會寬恕這一點,並且仍然說格式應該在表示層完成,您可以創建一個函數來格式化您的號碼:

CREATE FUNCTION dbo.FormatNumber (@Input FLOAT, @Precision INT) 
RETURNS VARCHAR(36) 
AS 
BEGIN 
    DECLARE @Output VARCHAR(36) = CAST(ROUND(@Input, @Precision) AS VARCHAR(36)); 
    IF (CHARINDEX('.', @Output) > 0) 

     RETURN SUBSTRING(@Output + REPLICATE('0', @Precision), 1, CHARINDEX('.', @Output) + @Precision) 

    RETURN @Output + '.' + REPLICATE('0', @Precision); 
END 

Example on SQL Fiddle

+0

嗨GarethD,你的幫助明確地解決了我的問題。非常感謝你。 – user3011414

+0

但是如果它是'23.4',結果只是23.4。他想要的是相同的格式(應該是23.400)。我們怎麼做到這一點? –

+0

hi @GarethD,varchar類型返回,我們如何求和或計算稍後使用此函數的列? (例如在c#,xtrareport中)。我試圖通過返回動態類型來找出其他解決方案(例如:如果Precision爲2,我們將返回數字(36,2),如果Precision爲3,我們將返回數字(36,3)...)。但這是不可能的。如果你有空閒時間,請幫助我。非常感謝。 –