0

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

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

我对任何解决方案都持开放态度,并感谢任何帮助。谢谢。

4

2 回答 2

2

甲骨文:

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

SQL 服务器:

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

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

于 2012-07-06T16:21:51.043 回答
0

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

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

于 2012-07-06T16:49:41.563 回答