簡體   English   中英

用T-SQL中的條件舍入十進制數

[英]Rounding up decimal number with condition in T-SQL

我有一個ASP功能,如下所示:

function GetRoundedVal(amount)

NoOfRight = right(formatnumber(amount,2),1)

if NoOfRight = 0 then
    roundedAmount = amount
elseif NoOfRight = 1 then
    roundedAmount = amount - 0.01
elseif NoOfRight = 2 then
    roundedAmount = amount - 0.02
elseif NoOfRight = 3 then
    roundedAmount = amount + 0.02
elseif NoOfRight = 4 then
    roundedAmount = amount + 0.01
elseif NoOfRight = 5 then
    roundedAmount = amount
elseif NoOfRight = 6 then
    roundedAmount = amount - 0.01
elseif NoOfRight = 7 then
    roundedAmount = amount - 0.02
elseif NoOfRight = 8 then
    roundedAmount = amount + 0.02
elseif NoOfRight = 9 then
    roundedAmount = amount + 0.01
else
end if

GetRoundedVal = roundedAmount

end function

結果應該是這樣的:

+----------------+--------+
| Original Value | Result |
+----------------+--------+
| 19.91          | 19.90  | Original Value - 0.01
| 19.92          | 19.90  | Original Value - 0.02
| 19.93          | 19.95  | Original Value + 0.02
| 19.94          | 19.95  | Original Value + 0.01
| 19.95          | 19.95  | 
| 19.96          | 19.95  | Original Value - 0.01
| 19.97          | 19.95  | Original Value - 0.02
| 19.98          | 20.00  | Original Value + 0.02
| 19.99          | 20.00  | Original Value + 0.01
+----------------+--------+

問題是我們可以直接在T-SQL上執行此操作嗎?
SQL Server V14。
如果它甚至可能。

謝謝。

你可以試試這個。

DECLARE @MyTable TABLE(OriginalValue DECIMAL(18,2))
INSERT INTO @MyTable VALUES (19.91), (19.92), (19.93), (19.94), (19.95),    (19.96), (19.97), (19.98), (19.99)

SELECT 
       OriginalValue, 
       ROUND( ( OriginalValue / 0.05 ), 0, 0 ) * 0.05 Result 
FROM @MyTable

結果:

OriginalValue                           Result
--------------------------------------- ---------------------------------------
19.91                                   19.90000000
19.92                                   19.90000000
19.93                                   19.95000000
19.94                                   19.95000000
19.95                                   19.95000000
19.96                                   19.95000000
19.97                                   19.95000000
19.98                                   20.00000000
19.99                                   20.00000000

試試這個

DECLARE @Inp TABLE
(
    Org DECIMAL(10,4),
    Res DECIMAL(10,2)
)

INSERT INTO @Inp
(
    Org
)
VALUES(19.91),
    (19.92),
    (19.93),
    (19.94),
    (19.95),
    (19.96),
    (19.97),
    (19.98),
    (19.99)

SELECT
    *,
    Result = CAST(
    Org +
    CASE RIGHT(CAST(Org AS DECIMAL(10,2)),1)
       WHEN 1 THEN -0.01
       WHEN 2 THEN -0.02
       WHEN 3 THEN 0.02
       WHEN 4 THEN 0.01
       WHEN 5 THEN 0
       WHEN 6 THEN -0.01
       WHEN 7 THEN -0.02
       WHEN 8 THEN 0.02
       WHEN 9 THEN 0.01
       ELSE 0 END
       AS DECIMAL(10,2))
    FROM @Inp


----------

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM