Oracle: How do I convert hex to decimal in Oracle SQL?

前端 未结 4 541
孤独总比滥情好
孤独总比滥情好 2020-12-03 05:02

How do I convert hexadecimal to decimal (and back again) using Oracle SQL?

相关标签:
4条回答
  • 2020-12-03 05:32

    Starting in Oracle8i, the TO_CHAR and TO_NUMBER functions can handle conversions from base 10 (decimal) to base 16 (hexadecimal) and back again:

    SQL> select to_char(123,'XX') to_hex, 
    2    to_number('7B','XX') from_hex   
    3   from dual  
    4  /   
    TO_     FROM_HEX
    ------  -----------------
    7B     123
    

    source

    0 讨论(0)
  • 2020-12-03 05:35

    If you are using 8.1.5 and above you can use:

    To convert from hexadecimal to decimal:

    select to_number('AA', 'xx') from dual;     
    

    To convert from decimal to hexadecimal:

    select to_char(111, 'xxxx') from dual;
    
    0 讨论(0)
  • 2020-12-03 05:38
    SELECT  TO_NUMBER('DEADBEEF', 'XXXXXXXX')
    FROM    dual
    
    ---
    3735928559
    
    SELECT  TO_CHAR(3735928559, 'XXXXXXXX')
    FROM    dual
    ---
     DEADBEEF
    
    0 讨论(0)
  • 2020-12-03 05:38

    FTA: Oracle to Decimal :

    CREATE OR REPLACE FUNCTION hex2dec (hexnum IN CHAR) RETURN NUMBER IS
      i                 NUMBER;
      digits            NUMBER;
      result            NUMBER := 0;
      current_digit     CHAR(1);
      current_digit_dec NUMBER;
    BEGIN
      digits := LENGTH(hexnum);
      FOR i IN 1..digits LOOP
         current_digit := SUBSTR(hexnum, i, 1);
         IF current_digit IN ('A','B','C','D','E','F') THEN
            current_digit_dec := ASCII(current_digit) - ASCII('A') + 10;
         ELSE
            current_digit_dec := TO_NUMBER(current_digit);
         END IF;
         result := (result * 16) + current_digit_dec;
      END LOOP;
      RETURN result;
    END hex2dec;
    /
    show errors
    
    CREATE OR REPLACE FUNCTION num2hex (N IN NUMBER) RETURN VARCHAR2 IS
      H  VARCHAR2(64) :='';
      N2 INTEGER      := N;
    BEGIN
      LOOP
         SELECT RAWTOHEX(CHR(N2))||H
         INTO   H
         FROM   dual;
    
         N2 := TRUNC(N2 / 256);
         EXIT WHEN N2=0;
      END LOOP;
      RETURN H;
    END num2hex;
    /
    show errors
    
    0 讨论(0)
提交回复
热议问题