当结果值大于bigint时,如何在SQL中将十六进制数转换为整数?

时间:2015-12-11 04:52:07

标签: sql sql-server sql-server-2008

我有一个字符串形式的十六进制数字,例如,0x47423f34b640c3eb6e2a18a559322d68。当我尝试将其转换为int时,为了与另一个int值进行比较,我遇到了BIGINT大小限制。我尝试了各种方法,如十进制等,但似乎无法超过64位大小限制。

理想情况下,我想要一个从十六进制字符串转换为int字符串的转换,因此我可以绕过int限制。但是,不使用中间转换(对超出范围的值)这样做会导致一些问题。

另一种解决方案是能够将十进制字符串(另一个比较值,在给出的示例中为94719161261466374640962917648041127272)转换为十六进制或二进制,以进行比较。我已经有一个例程,可以将任意长度的十六进制字符串转换为二进制而不会溢出中间变量,但我没有太多运气将十进制字符串转换为二进制而不使用中间变量,因此我目前无法以这种方式比较它们。 / p>

我已经为此转换提供了基于ac#的解决方案,因此我可以使用SQL CLR或其他类似的解决方案,但我更喜欢使用本机SQL方法进行此转换(十进制字符串为十六进制字符串或二进制字符串,或者hex string to decimal string或binary string)。

1 个答案:

答案 0 :(得分:0)

SQL Server 2008发行版更新了See CONVERT() here函数,以便能够转换十六进制值:

select convert(bigint, convert (varbinary(8), '0x0000010d1858798c', 1))

结果:

1155754654092 (decimal) ( ==  0x0000010d1858798c )