正如問題所示,我需要舍入或舍入到最接近的20,除了0-14之間的數字外,所有舍入都必須舍入爲20,因爲不允許有零值。向上或向下舍入爲最接近的20
CASE WHEN ROUND(number,-2)=0 THEN CAST(ROUND(number,-2)+100 AS DECIMAL(18, 0))
ELSE CAST(ROUND(number,-2) AS DECIMAL(18,0)) END AS [NUMBER]
正如問題所示,我需要舍入或舍入到最接近的20,除了0-14之間的數字外,所有舍入都必須舍入爲20,因爲不允許有零值。向上或向下舍入爲最接近的20
CASE WHEN ROUND(number,-2)=0 THEN CAST(ROUND(number,-2)+100 AS DECIMAL(18, 0))
ELSE CAST(ROUND(number,-2) AS DECIMAL(18,0)) END AS [NUMBER]
試試這個:
DECLARE @testValue Int = 35;
SELECT
CASE
WHEN @testValue BETWEEN 0 AND 14 THEN 20
ELSE ROUND((@testValue * 1.0)/20, 0) * 20
END MyRoundedValue;
可能有多個表還沒有與新values.For更新我現在只處理或如下所示四捨五入到最接近100最佳方法,但這是第一個想到的解決方案。 * 1.0
將強制轉換爲浮點數,以便/ 20
將生成分數結果。結果使用ROUND
進行四捨五入,然後再乘以20
以得到最終的「舍入」值。
編輯把你的0-14
考慮特殊情況...
這將工作:
--N = Your nearest number
--X = Number to round
SELECT ROUND(X/N, 0) * N
實例應用:
DECLARE @numberToRound INT;
SET @numberToRound = 25;
CASE WHEN @numberToRound BETWEEN 0 AND 14 THEN
20
ELSE
ROUND((CAST(@numberToRound AS DECIMAL)/20.00), 0) * 20
END
我喜歡整數除法*如果可能,並且如果number
是一個整數,我的解決方案很可能是這樣的:
CASE
WHEN number BETWEEN 0 AND 14 THEN 20 /* actually, it seems to make more sense
to have the range as BETWEEN 0 AND 9,
because values from 10 to 14 would be
converted to 20 with the ELSE branch
anyway */
ELSE (number + 10)/20 * 20
END
* SQL Server使用整數除法時兩個操作數均爲整數。
除以20.0將強制浮點數。你不需要以1.0倍數 – cadrell0 2011-12-22 14:19:02
因此,它基本上是一樣的想法。但是,是的,它也可以寫成'ELSE ROUND(@testValue/20.0,0)* 20'。如果'20'是一個也是'Int'的變量,那麼您將需要'* 1.0'。 – Yuck 2011-12-22 14:19:57
我不知道爲什麼有時結果是1或2(不同的值btw,19; 29; 16等)。但我修改了我的問題中描述的格式的代碼,它的工作非常好。感謝很多,我沒有想到與1.0相乘。 – Hari 2011-12-22 14:35:37