Oracle和SQL Server - 将十六进制转换为十进制

时间:2012-07-06 15:53:16

标签: sql sql-server oracle oracle11g hex

我需要一种方法将十六进制值转换为数字,以便我可以在oracle和SQL服务器中将它们加在一起(我需要最终得到一个值)。我很难在两台服务器上获得相同的结果。这些是十六进制值:

        SQL SERVER                            ORACLE
____________________________________________________________________
0x6512BD43D9CAA6E02C990B0A82652DCA  6512BD43D9CAA6E02C990B0A82652DCA
0xC20AD4D76FE97759AA27A0C99BFF6710  C20AD4D76FE97759AA27A0C99BFF6710
0xC51CE410C124A10E0DB5E4B97FC2AF39  C51CE410C124A10E0DB5E4B97FC2AF39
0x1FF1DE774005F8DA13F42943881C655F  1FF1DE774005F8DA13F42943881C655F
0x1C383CD30B7C298AB50293ADFECB7B18  1C383CD30B7C298AB50293ADFECB7B18
0xC74D97B01EAE257E44AA9D5BADE97BAF  C74D97B01EAE257E44AA9D5BADE97BAF
0x67C6A1E7CE56D3D6FA748AB6D9AF3FD7  67C6A1E7CE56D3D6FA748AB6D9AF3FD7
0x6F4922F45568161A8CDF4AD2299F6D23  6F4922F45568161A8CDF4AD2299F6D23

我对任何解决方案都非常开放,感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:2)

甲骨文:

select to_number('6512BD43D9CAA6E02C990B0A82652DCA', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') from dual;     

SQL Server:

select convert(int, convert(varbinary, '0x6512BD43D9CAA6E02C990B0A82652DCA', 1))

请注意,您使用的数字很大,因此可以解释您所拥有的转换问题。它们看起来像UDID。是否有理由将这些十六进制字符串转换为整数?

答案 1 :(得分:0)

这些十六进制值太大,无法存储为数字,句点。给出的示例是32个十六进制数字,需要124位(无符号)的数据类型。如果您尝试使用本机整数,溢出。对它们求和将产生更大的值。

无论如何,您需要找到一种方法来处理任意长的十六进制数。找到或写一个数学库来做到这一点。在Oracle中,您可以使用Java或.NET存储过程执行此操作。同样,SQL Server可能会使用可以使用的.NET例程,这将提供一致的代码。 PL / SQL或T-SQL解决方案不太可能表现得非常好。