我有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;
我有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;
這應該工作:
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
你可以分享它的MySQL語法? –
你是什麼意思?這是mysql –
「#1064 - 你的SQL語法錯誤;查看與你的MySQL服務器版本相對應的手冊,以便在'mytable SET col = col + CASE WHEN MOD(col,10)< = 9.9'在第1行「我使用mysql 5.5 –
什麼是'col'的類型?請注意,對於任何可能具有不同精度級別的類型,使用「BETWEEN」本質上都是危險的; [這個博客談論日期/時間/時間戳](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common。 aspx),但你有可能在這裏遇到它。對於所有範圍,請使用下限包含('> ='),上限排他('<')條件。 –
這與時間無關。這只是一個價格欄。 –
無關緊要,遇到任何類型的支持不同級別的精度的任何類型的問題(即,任何非整數,甚至處理整數範圍都可能受益於說明範圍我建議的方式)。例如,只要SQL只使用兩位數字的'NUMERIC' /'DECIMAL'類型,你的代碼就很好,你可能沒有完全的控制權。按照我的建議來做範圍,並且你的代碼對於任何精度都是有好處的,對於任何欺騙者來說,數據庫都可能吸引你。 –