将十六进制转换为大整数

时间:2017-12-26 19:21:06

标签: sql sql-server tsql integer hex

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

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

  

800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D507A5B8D

必须给出结果:

  

63680997318088143281752740767766707563546963464218564507450892460763521488675430192536461

在SQL中我尝试:

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

给了我

  

-4735785797357674083

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

1 个答案:

答案 0 :(得分:3)

根据Microsoft的说法,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等)的工具将该字节序列转换为大数字。