我需要一种方法将十六进制值转换为数字,以便我可以在oracle和SQL服务器中将它们加在一起(我需要最终得到一个值)。我很难在两台服务器上获得相同的结果。这些是十六进制值:
SQL SERVER ORACLE
____________________________________________________________________
0x6512BD43D9CAA6E02C990B0A82652DCA 6512BD43D9CAA6E02C990B0A82652DCA
0xC20AD4D76FE97759AA27A0C99BFF6710 C20AD4D76FE97759AA27A0C99BFF6710
0xC51CE410C124A10E0DB5E4B97FC2AF39 C51CE410C124A10E0DB5E4B97FC2AF39
0x1FF1DE774005F8DA13F42943881C655F 1FF1DE774005F8DA13F42943881C655F
0x1C383CD30B7C298AB50293ADFECB7B18 1C383CD30B7C298AB50293ADFECB7B18
0xC74D97B01EAE257E44AA9D5BADE97BAF C74D97B01EAE257E44AA9D5BADE97BAF
0x67C6A1E7CE56D3D6FA748AB6D9AF3FD7 67C6A1E7CE56D3D6FA748AB6D9AF3FD7
0x6F4922F45568161A8CDF4AD2299F6D23 6F4922F45568161A8CDF4AD2299F6D23
我对任何解决方案都非常开放,感谢任何帮助。感谢。
答案 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解决方案不太可能表现得非常好。