標籤:oracle進位化函數
十六進位轉化為十進位:to_number()
SQL> select to_number(‘a‘,‘x‘) from dual;TO_NUMBER(‘A‘,‘X‘)------------------ 10
十進位轉化為十六進位:to_char()
SQL> select to_char(10,‘xxx‘) from dual;TO_CHAR(10,‘------------ a
二進位沒有辦法直接轉化可以通過函數實現:
十進位轉化為二進位
CREATE OR REPLACE FUNCTION NUMBER_TO_BIT(V_NUM NUMBER)RETURN VARCHAR IS V_RTN VARCHAR(8);--注意返回列長度 V_N1 NUMBER; V_N2 NUMBER;BEGINV_N1 := V_NUM; LOOP V_N2 := MOD(V_N1, 2); V_N1 := ABS(TRUNC(V_N1 / 2)); --取商的絕對值 V_RTN := TO_CHAR(V_N2) || V_RTN; EXIT WHEN V_N1 = 0; END LOOP;--返回二進位長度 SELECT lpad(V_RTN,8,0) --八位不足補0 INTO V_RTN FROM dual;return V_RTN;end;
二進位轉化為十進位:
CREATE OR REPLACE FUNCTION BIT_TO_NUMBER(P_BIN IN VARCHAR2) RETURN NUMBER AS V_SQL VARCHAR2(30000) := ‘SELECT BIN_TO_NUM(‘; V_RETURN NUMBER;BEGIN IF LENGTH(P_BIN) >= 256 THEN RAISE_APPLICATION_ERROR(-20001, ‘INPUT BIN TOO LONG!‘); END IF; IF LTRIM(P_BIN, ‘01‘) IS NOT NULL THEN RAISE_APPLICATION_ERROR(-20002, ‘INPUT STR IS NOT VALID BIN VALUE!‘); END IF; FOR I IN 1 .. LENGTH(P_BIN) LOOP V_SQL := V_SQL || SUBSTR(P_BIN, I, 1) || ‘,‘; END LOOP; V_SQL := RTRIM(V_SQL, ‘,‘) || ‘) FROM DUAL‘; EXECUTE IMMEDIATE V_SQL INTO V_RETURN; RETURN V_RETURN;END;
建立函數同義字
create public synonym number_to_bit for number_to_bit;grant execute on number_to_bit to public
十六轉二和二轉十六,則可以結合十轉十六函數和二轉十函數進行,這裡不在額外舉例。
ASCII碼及ORACLE中繼資料轉換函式:RAWTOHEX和HEXTORAW
SQL> select rawtohex(1) from dual;RAWTOHEX(1)------------C102SQL> select rawtohex(‘1‘) from dual;RAWTOH------31SQL> select rawtohex(‘a‘) from dual;RAWTOH------61SQL> select rawtohex(‘A‘) from dual;RAWTOH------41SQL> select hextoraw(‘A‘) from dual;HE--0ASQL> select hextoraw(‘1‘) from dual;HE--01
本文出自 “LinuxOracle” 部落格,請務必保留此出處http://onlinekof2001.blog.51cto.com/3106724/1652746
Oracle通過函數進行進位轉化