2017-02-15 39 views
0

我需要SQL中模仿excel的FLOOR()函數的東西。 SQL的FLOOR()函數只需要一個參數並向下舍入到最接近的整數。但我需要能夠選擇重要性,如在Excel的FLOOR()函數中。SQL按意義向下舍入(相當於excel的floor函數)

實例:在Excel FLOOR(6.03,.125) = 6.00,並且FLOOR(6.63,.125) = 6.625 但在SQL到目前爲止,我已經試過ROUND(6.63,.125)= 7.00ROUND(6.63,.125,1) = 6.00

有誰知道我可以做到我要做什麼?

回答

2
Declare @V float = 6.3 
Declare @F float = 0.125 

Select Floor(@V)+floor((@V-Floor(@V))/@F)*@F 

返回

6.25 

編輯 - 如果UDF需要

CREATE Function [dbo].[udf-Stat-Round-To](@Value float,@Round float) 
Returns Float 
As 
Begin 

Return case when @Round=0 then NULL else Floor(@Value)+Floor((@Value-Floor(@Value))/@Round)*@Round end 

End 
-- Syntax Select [dbo].[udf-Stat-Round-To](10.13,.125) -- 10.125 
+0

我給你一票,如果你擺脫'IIF'的...我在Access上仍然有噩夢。公平交易? – SqlZim

+0

@SqlZim完成。就我個人而言,我對IIF()和/或案例漠不關心。他們呈現相同:) –

+0

看起來不錯!只有其他問題是,如果使用內聯TVF而不是標量,性能不會更好。儘管如此,仍然是一個好的解決方案+1 – SqlZim