Oracle: Как мне преобразовать шестнадцатеричное в десятичное в Oracle SQL? - PullRequest
21 голосов
/ 04 августа 2009

Как преобразовать шестнадцатеричное в десятичное (и обратно) с помощью Oracle SQL?

Ответы [ 4 ]

35 голосов
/ 04 августа 2009

Если вы используете 8.1.5 и выше, вы можете использовать:

Для преобразования из шестнадцатеричного в десятичное:

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

Чтобы преобразовать десятичное число в шестнадцатеричное:

select to_char(111, 'xxxx') from dual;
11 голосов
/ 04 августа 2009
SELECT  TO_NUMBER('DEADBEEF', 'XXXXXXXX')
FROM    dual

---
3735928559

SELECT  TO_CHAR(3735928559, 'XXXXXXXX')
FROM    dual
---
 DEADBEEF
5 голосов
/ 04 августа 2009

Начиная с Oracle8i, TO_CHAR и Функции TO_NUMBER могут обрабатывать преобразования из базы 10 (десятичной) в основание 16 (шестнадцатеричное) и обратно:

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

источник

3 голосов
/ 04 августа 2009

FTA: Оракул в десятичное число :

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...