【问题标题】:Mysql CAST return invalid dataMysql CAST 返回无效数据
【发布时间】:2013-03-04 07:44:46
【问题描述】:

我有一个问题

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

返回

 2.01303045556E+12

但实际上最大值是2013030455555

有人知道这是怎么回事吗?

【问题讨论】:

  • 但它工作正常here 你可能需要正确格式化它。

标签: mysql cas unsigned


【解决方案1】:

没错。

2.01303045556E+12 实际上是 2013030455555

x E+12 表示x*10 ^ 12

2*10^12=2000000000000(2 后跟 12 个零)。

这是指数(通常是浮点)数字表示。请参阅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 中更改数字格式(如果您正在使用它)。

【讨论】:

  • 如何转换成2013030455555?如果数字太小,则返回实际值?
  • 你应该尝试使用浮点数,php 不支持无符号整数。 (如果你使用 php)
  • @Dennis 他不能使用浮点数,因为浮点数“大于”6 位在 MySQL 中以指数格式显示。
  • 现在我得到了结果,但我找不到该数字的下一个数字。 $row['max_id']+1 也采用这种格式。如何在 PHP 中将 2.01303045556E+12 转换为 2013030455555??
  • @shn 可以使用 number_format 函数,帮助链接:php.net/manual/en/function.number-format.php
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2019-08-11
  • 1970-01-01
  • 2014-07-11
  • 2013-01-20
  • 1970-01-01
  • 2020-06-20
相关资源
最近更新 更多