oracle中16进制怎么表示?

__Ray__ 2010-12-02 04:22:13
有时为了方便表示数字,用16进制更直观,比如C语言里用0xFF这样表示16进制数,ORACLE中有没有相应的表示方法?注意我不是要什么进制转换函数,简单的表示符号而已,有没有?
...全文
333 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq240971315 2010-12-02
  • 打赏
  • 举报
回复
简单的表示符号?没有
sunlaji008 2010-12-02
  • 打赏
  • 举报
回复

select to_char(17,'xxx')from dual;

TO_CHAR(17,'XXX')
-----------------
11

11当然不能表示17在oracle中,因此要调整进制模式,如下:

CREATE OR REPLACE PROCEDURE dec2hex (in_num IN NUMBER, out_hex OUT VARCHAR2)
  IS
    TYPE vc2tab_type IS TABLE OF VARCHAR2(1)
     INDEX BY BINARY_INTEGER;
  
    hextab            vc2tab_type;
    v_num             NUMBER;
    v_hex             VARCHAR2(200);
  
  /*
  Author: Jonas Nordstrom
  */
  BEGIN
    IF in_num IS NULL THEN RETURN NULL; END IF; 
  
    hextab (0) := '0';
    hextab (1) := '1';
    hextab (2) := '2';
    hextab (3) := '3';
    hextab (4) := '4';
    hextab (5) := '5';
    hextab (6) := '6';
    hextab (7) := '7';
    hextab (8) := '8';
    hextab (9) := '9';
    hextab (10) := 'A';
    hextab (11) := 'B';
    hextab (12) := 'C';
    hextab (13) := 'D';
    hextab (14) := 'E';
    hextab (15) := 'F';
    v_num := in_num;
  
    WHILE v_num >= 16
    LOOP
     v_hex := hextab (MOD (v_num, 16)) v_hex;
     v_num := TRUNC (v_num / 16);
    END LOOP;
  
    v_hex := hextab (MOD (v_num, 16)) v_hex;
    out_hex := v_hex;
  END;  -- dec2hex
  /
  
  CREATE OR REPLACE FUNCTION hextointeger (h VARCHAR2)
    RETURN PLS_INTEGER
  IS
  BEGIN
    IF NVL (LENGTH (h), 1) = 1
    THEN
     RETURN INSTR ('0123456789ABCDEF', h) - 1;
    ELSE
     RETURN 16 * hextointeger (SUBSTR (h, 1, LENGTH (h) - 1)) +
         INSTR ('0123456789ABCDEF', SUBSTR (h, -1)) -
         1;
    END IF;
  END hextointeger;
  /
  
  CREATE OR REPLACE FUNCTION integertohex (n pls_integer)
    RETURN VARCHAR2
  IS
  BEGIN
    IF n > 0
    THEN
     RETURN integertohex (TRUNC (n / 16))
         SUBSTR ('0123456789ABCDEF', MOD (n, 16) + 1, 1);
    ELSE
     RETURN NULL;
    END IF;
  END integertohex;
  /
sunlaji008 2010-12-02
  • 打赏
  • 举报
回复
select to_char(17,'xxx') from dual;
这能转,但不是你要的效果
  • 打赏
  • 举报
回复
[Quote=引用楼主 ljdzxx 的回复:]
有时为了方便表示数字,用16进制更直观,比如C语言里用0xFF这样表示16进制数,ORACLE中有没有相应的表示方法?注意我不是要什么进制转换函数,简单的表示符号而已,有没有?
[/Quote]貌似没有哦,转换函数倒是有的
__Ray__ 2010-12-02
  • 打赏
  • 举报
回复
有?没有?这个真没有?
sunlaji008 2010-12-02
  • 打赏
  • 举报
回复
简单的表示符号?没有

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧