programing

Oracle: Oracle SQL에서 16진수를 10진수로 변환하려면 어떻게 해야 합니까?

minimums 2023. 6. 17. 08:56
반응형

Oracle: Oracle SQL에서 16진수를 10진수로 변환하려면 어떻게 해야 합니까?

Oracle SQL을 사용하여 16진수를 10진수로 변환하거나 다시 변환하려면 어떻게 해야 합니까?

8.1.5 이상을 사용하는 경우 다음을 사용할 수 있습니다.

16진수에서 10진수로 변환하는 방법

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

10진수에서 16진수로 변환하는 방법

select to_char(111, 'xxxx') from dual;
SELECT  TO_NUMBER('DEADBEEF', 'XXXXXXXX')
FROM    dual

---
3735928559

SELECT  TO_CHAR(3735928559, 'XXXXXXXX')
FROM    dual
---
 DEADBEEF

Oracle 8i부터 TO_CHAR 및 TO_NUMBER 함수는 기본 10(십진수)에서 기본 16(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

원천

FTA: Oracle에서 소수:

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

to_numberto_char의 'X' 옵션은 오랫동안 사용할 수 있었지만 Oracle 설명서에는 아직 나타나지 않습니다.

16진수로 변환하거나 16진수에서 16진수로 변환하는 것 외에도 이진수 또는 8진수로 변환하는 것이 바람직할 수 있습니다.Oracle은 제가 알고 있는 것에 대해 아무것도 제공하지 않습니다.

Oracle에서 binary로/binary로 변환하는 내장 메서드를 아직 추가하지 않았는지 검색하는 동안 이 스레드를 찾았지만 여전히 사용할 수 없는 것 같습니다.

오래 전에 저는 다양한 포맷을 변환하는 데 사용할 수 있는 PL/SQL 패키지 'Radix'를 작성했습니다.

다음 데모 SQL:

select radix.to_hex(285) from dual;
select radix.to_dec('11D', 16) from dual;
select radix.to_bin(255) from dual;
select radix.to_bin(256) from dual;

다음과 같은 결과를 얻었습니다.

RADIX.TO_HEX(285)
----------------------------------------
11D

RADIX.TO_DEC('11D',16)
----------------------
                   285

RADIX.TO_BIN(255)
----------------------------------------
11111111

RADIX.TO_BIN(256)
----------------------------------------
100000000

코드는 오픈 소스(MIT 라이센스)이며, 관심이 있는 경우 여기에서 사용할 수 있습니다.

오라클 Radix 패키지

언급URL : https://stackoverflow.com/questions/1227039/oracle-how-do-i-convert-hex-to-decimal-in-oracle-sql

반응형