'Signed integer to signed hexadecimal 2's compliment in oracle

I have a sample negative number in a column of a table. e.g -1000

Expected Output- FC18

I want the output as FC18 in oracle SQL, which is Signed Hexadecimal 2's compliment

Reference- https://www.rapidtables.com/convert/number/decimal-to-hex.html?x=-1000



Solution 1:[1]

You can use:

SELECT value,
       TO_CHAR(
         CASE
         WHEN value >= POWER(2,15) OR value < -POWER(2, 15)
         THEN NULL
         WHEN value < 0
         THEN POWER(2,16)
         ELSE 0
         END + value,
         'FM000X'
       ) AS int_to_2c_hex
FROM   table_name;

Which, for the sample data:

CREATE TABLE table_name (value) AS
  SELECT  +1000 AS value FROM DUAL UNION ALL
  SELECT  -1000 FROM DUAL UNION ALL
  SELECT     -1 FROM DUAL UNION ALL
  SELECT     +1 FROM DUAL UNION ALL
  SELECT +32767 FROM DUAL UNION ALL
  SELECT -32768 FROM DUAL UNION ALL
  SELECT +32768 FROM DUAL UNION ALL
  SELECT -32769 FROM DUAL;

Outputs:

VALUE INT_TO_2C_HEX
1000 03E8
-1000 FC18
-1 FFFF
1 0001
32767 7FFF
-32768 8000
32768 null
-32769 null

db<>fiddle here

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1