2015-04-28 49 views
1

我有一個簡單的表有一個整數列:如何獲得Round()的第二個參數以使用列?

# setup table: 
create table t(x int); insert t select 1; 

查詢select round(1.234, 1) from t回報1.2預期。

但是,select round(1.234, x) from t返回1.2000。 (它應該返回1.2,作爲per the docs。)

這是一個錯誤? (測試版5.5.10latest 5.6.24。)

或者,有沒有什麼特別的技術之所以列不能在round第二個參數一起使用?

我們怎樣才能讓round工作即使有第二個參數中使用的列?

+0

對於評估事物的順序,mysql似乎有些隨意。試試這個:'select if(@z:= sum(5),@z,'wtf');' –

+1

它工作在SQL小提琴http://sqlfiddle.com/#!9/22e0e/1。 –

+0

@ThorstenKettner,不適用於官方MySQL社區服務器。 ([mysql-5.6.24-win32.zip,mysql-5.6.24-winx64.zip](https://dev.mysql.com/downloads/mysql#files-ga)) – Pacerier

回答

1

考慮使用FORMAT代替ROUND

mysql> SELECT FORMAT(1.234, x) FROM (SELECT 1 AS x) y; 
+------------------+ 
| FORMAT(1.234, x) | 
+------------------+ 
| 1.2    | 
+------------------+ 

如果是不盡如人意,file a bugROUND

0

此錯誤不限於ROUND(),但也會發生TRUNCATE()

從@RickJames接受的答案/解決方法是不完全正確的,因爲FORMAT()介紹了千個分隔符:FORMAT() documentation

爲任意值正確解決方法:

SELECT REPLACE(FORMAT(t.raw_number, t.decimal_places), ',', '') 
FROM my_table t; 

(添加爲單獨的答案我的意見,因爲我沒有足夠的評論意見...)

相關問題