gpt4 book ai didi

mysql - 在 MySQL 中处理 128 位数字

转载 作者:可可西里 更新时间:2023-11-01 07:37:17 26 4
gpt4 key购买 nike

我的表有一个列,我知道它是一个 128 位无符号数,以 base-10 的形式存储为 varchar,例如

"25495123833603613494099723681886"

我知道这个数字中的位域,我想使用 GROUP BY 中的前 64 位.

在我的示例中,前 64 位为 1382093432409

我还没有找到办法,但我已经排除了一些线索:

  • 无法转换为 NUMERIC/DECIMAL因为这些也是 64 位的
  • 不能使用LEFT()因为1<<64不是以 10 为基数对齐的
  • CONV(N,10,16)将允许 LEFT()但是CONV()也只能以 64 位精度工作:(

我怎样才能得到 BIGINT这是这个数字的前 64 位,所以我可以在 GROUP BY 中使用它?

最佳答案

您至少可以使用 float 学来完成部分工作。

MySQL 对非整数数学使用 double float 。这为整数值提供了大约 50 位的可靠精度——虽然这不是 64 位,但已经非常接近了。您可以使用 float 学表达式在此处提取最高位:

FLOOR(n / POW(2,64))

其中 n 是列的名称。

但是,如果需要超过 50 位,这种方法就会失去动力,因为即使 double float 也没有足够的有效位来表示整个事物,并且由于取消而尝试使用减法获得更多失败. (一旦字符串被转换为数字,额外的位就会丢失;如果不做一些完全不同的事情,它们就无法恢复。)

关于mysql - 在 MySQL 中处理 128 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19558904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com