2013-03-04 62 views
2

我有一個查詢Mysql的CAST返回無效數據

SELECT MAX(CAST(user_name as SIGNED)) as max_id FROM (`users`) 

返回

2.01303045556E+12 

但實際上最大值2013030455555

任何人都知道它是如何發生的?

+1

但它工作正常[** here **](http://www.sqlfiddle.com/#!2/e4cea/4),您可能需要正確格式化它。 – 2013-03-04 07:55:57

回答

2

這是正確的。

2.01303045556E+12實際上是2013030455555

x E+12裝置x*10^12

2*10^12=2000000000000(2後跟12個0)。

這是expotential(通常爲浮點數)表示形式。見Scientific notation at wikipedia(向下滾動到「E符號」)。

要擺脫它您可以將該數據轉換爲十進制或整數,而不是浮點數。也許有更好的方法,但我不知道他們。

例子:

-- example for 16 digits 
SELECT MAX(CAST(user_name as DECIMAL(16,0)) as max_id FROM (`users`) 

另一種解決方案:在SQL或也許PHP數量的變化形式,如果你正在使用它。

+0

如何將其轉換爲2013030455555?如果數量太小,則返回爲實際值? – Shin 2013-03-04 07:55:27

+0

你應該嘗試使用float,php不支持無符號整數。 (如果你使用php) – Dennis 2013-03-04 08:08:38

+0

@丹尼斯他不能使用浮點數,因爲浮點「比6位大」的數字在MySQL中以指定格式顯示。 – Kamil 2013-03-04 08:14:57