2017-02-15 5 views
0

ExcelのFLOOR()関数を模倣したSQLのものが必要です。 SQLのFLOOR()関数は引数を1つしか取らず、最も近い整数に丸めます。しかし、私はExcelのFLOOR()機能のように、重要性を選択する必要があります。重要度別に丸めたSQL(Excelのfloor関数に相当)

例:エクセル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 

EDIT - 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