在Oracle SQL->如何将十六进制数转换为有符号32位整数(即不转换为十进制数)
在Oracle SQL中,我可以转换十六进制数=b60d9800 转换为十进制数=3054344192 通过使用查询: 从双通道中选择编号“b60d9800”、“xxxxxxxx” 但是我还需要它来给我有符号的32位整数=-1240623104 有人知道如何使用Oracle SQL进行此转换吗?看过 这并不能完全解决我的问题,但却将我引向了正确的方向。我提出了以下解决方案:在Oracle SQL->如何将十六进制数转换为有符号32位整数(即不转换为十进制数),oracle,Oracle,在Oracle SQL中,我可以转换十六进制数=b60d9800 转换为十进制数=3054344192 通过使用查询: 从双通道中选择编号“b60d9800”、“xxxxxxxx” 但是我还需要它来给我有符号的32位整数=-1240623104 有人知道如何使用Oracle SQL进行此转换吗?看过 这并不能完全解决我的问题,但却将我引向了正确的方向。我提出了以下解决方案: select (case when m> 2147483647 then (m - Power(2,32))
select (case when m> 2147483647 then (m - Power(2,32))
else (m) end) a
from (select mod(n, Power(2,32)) m
from (select to_number('b60d9800', 'xxxxxxxx') n from dual))
您还可以用Power2,32/2-1替换2147483647,以获得:当m>Power2,32/2-1时选择大小写,然后m-Power2,32 else m end a从select modn,Power2,32 m从select到_number'bcc9c000',xxxxxxxx'n从dual;你也可以用m>=power2,31来代替它,谢谢-所以当m>=power2,32/2然后m-power2,32否则m结束a从select modn,power2,32 m从select到_number'bcc9c000',xxxxxxxx'n从DUAL你可以编辑你的答案在post下面的“查找编辑”按钮。此外,power2,31更容易理解,IMHO。