2013-03-04 82 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