2013-09-21 46 views
-1

我有2位小數如12.09的數字。我想將所有內容都舍入到x9.90或xx9.90。SQL回合號碼

我有這樣的代碼舍入到xxx.90:

UPDATE x 
SET y = ROUND(col,1,2) + 
CASE 
WHEN y -(ROUND(col,1,2)) BETWEEN .00 AND .89 THEN .90 
ELSE .90 
END; 
+0

什麼是'col'的類型?請注意,對於任何可能具有不同精度級別的類型,使用「BETWEEN」本質上都是危險的; [這個博客談論日期/時間/時間戳](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common。 aspx),但你有可能在這裏遇到它。對於所有範圍,請使用下限包含('> ='),上限排他('<')條件。 –

+0

這與時間無關。這只是一個價格欄。 –

+0

無關緊要,遇到任何類型的支持不同級別的精度的任何類型的問題(即,任何非整數,甚至處理整數範圍都可能受益於說明範圍我建議的方式)。例如,只要SQL只使用兩位數字的'NUMERIC' /'DECIMAL'類型,你的代碼就很好,你可能沒有完全的控制權。按照我的建議來做範圍,並且你的代碼對於任何精度都是有好處的,對於任何欺騙者來說,數據庫都可能吸引你。 –

回答

0

這應該工作:

UPDATE mytable 
SET col = col + 
    CASE WHEN 
     MOD(col, 10) <= 9.9 
    THEN 
     9.9 - MOD(col, 10) -- for x0.00 - x9.90 
    ELSE 
     19.9 - MOD(col, 10) -- for x9.91 - x9.99 
    END 
+0

你可以分享它的MySQL語法? –

+0

你是什麼意思?這是mysql –

+0

「#1064 - 你的SQL語法錯誤;查看與你的MySQL服務器版本相對應的手冊,以便在'mytable SET col = col + CASE WHEN MOD(col,10)< = 9.9'在第1行「我使用mysql 5.5 –