我的应用程序需要处理高达10 ^ 45的正数。 我有一个表统计:somenumber BIGINT 在此表中,我有以下条目:“somenumber = 775488948283” 我想让MySQL返回775488948283000000000000000000000000000。
我试过
SELECT
(
SELECT somenumber FROM stats LIMIT 1
)*1000000000000000000000000000 as bignumber;
但是我收到了一个MySQL错误:ERROR 1690(22003):BIGINT值超出范围......
我不明白,当我进行双重选择时,我不在统计表中,为什么MySQL告诉我它太大了,我怎么能让MySQL将这个数字乘以1000000000000000000000000000并给我结果?
答案 0 :(得分:0)
BIGINT的最大值是:
9,223,372,036,854,775,807
答案 1 :(得分:0)
当结果值超过MAX UNSIGNED范围值时,您无法直接处理整数。相反,您必须使用type promotion
对结果值使用cast
方法。
以下内容应该有效。
SELECT
CAST(
( SELECT my_big_int_num FROM STATS LIMIT 1 ) AS DECIMAL
) * 1000000000000000000000000000 as big_big_number
答案 2 :(得分:0)
如果你跑:
SELECT 775488948283*1000000000000000000000000000 as bignumber;
您将得到正确答案,但表示为浮点数(指数形式)。
如果你跑:
SELECT cast(775488948283*1000000000000000000000000000 as char(255)) as bignumber;
您将获得所需的输出。
您还可以将值转换为字符串,然后附加零:
select concat(cast(775488948283 as char(255)),
'000000000000000000000000000'
)
我会用最后一个。对于浮点数,您总是冒着最低位数可能变成其他数字的风险 - 精度不足以存储45位数。
在数据库中,您可能希望将该数字存储为decimal(65, 0)
,以便最好地代表您的数据。