将十六进制转换为大整数

问题描述 投票:-3回答:1

尝试使用TSQL将十六进制转换为大整数:

根据在线计算器here(十六进制到十进制),

800 0 0 0 0 0 0 0 0 0 0 0 0 0 0

必须给出结果:

63680997318088143281752740767766707563546963464218564507450892460763521488675430192536461

在SQL中我尝试:

SELECT CONVERT(BIGINT, CONVERT(VARBINARY, '800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D507A5B8D', 2))

这给了我

-4735785797357674083

有谁知道如何在SQL中执行此操作?

sql sql-server tsql integer hex
1个回答
3
投票

根据微软的说法,bigint类型不能提供足够的精度来支持如此大小的值:

Data type   Range               Storage
---------   ---------------     -------
bigint      -2^63 to 2^63-1     8 Bytes

这意味着你可以成功从VARBINARY转换成BIGINT的最高数目是9,223,372,036,854,775,807。

TSQL缺少可以表示无界整数的数字类型。您应该将VARBINARY作为一个字节序列读入程序,并使用“宿主语言”(C,C ++,C#,Java等)的工具将该字节序列转换为大数字。

© www.soinside.com 2019 - 2024. All rights reserved.