在oracle中,如何编写一个函数实现十进制和二进制的转换
在oracle中,如何编写一个函数实现十进制和二进制的转换
比如输入10,显示的结果是1010。
------解决方案--------------------CREATE OR REPLACE FUNCTION decimal_to_binary (p_input INTEGER)
  RETURN VARCHAR2 IS
  TYPE typ_hex_list IS TABLE OF VARCHAR2 (4)
     INDEX BY VARCHAR2 (1);
  w_hex_list   typ_hex_list;
  w_len        INTEGER;
  w_hex_str    VARCHAR2 (50);
  w_output     VARCHAR2 (200);
BEGIN
  w_hex_list ('0') := '0000';
  w_hex_list ('1') := '0001';
  w_hex_list ('2') := '0010';
  w_hex_list ('3') := '0011';
  w_hex_list ('4') := '0100';
  w_hex_list ('5') := '0101';
  w_hex_list ('6') := '0110';
  w_hex_list ('7') := '0111';
  w_hex_list ('8') := '1000';
  w_hex_list ('9') := '1001';
  w_hex_list ('a') := '1010';
  w_hex_list ('b') := '1011';
  w_hex_list ('c') := '1100';
  w_hex_list ('d') := '1101';
  w_hex_list ('e') := '1110';
  w_hex_list ('f') := '1111';
  SELECT TO_CHAR (p_input, RPAD ('FM', 50, 'x'))
  INTO   w_hex_str
  FROM   DUAL;
  w_len := LENGTH (w_hex_str);
  FOR i IN 1 .. w_len LOOP
     w_output := w_output || w_hex_list (SUBSTR (w_hex_str, i, 1));
  END LOOP;
  RETURN TO_NUMBER (w_output);
END decimal_to_binary;
/
------解决方案--------------------alter proc prc_num @num bigint
as
declare @numstr varchar(50)
set @numstr=''
while (@num<>0)
begin
  set @numstr=@numstr+convert(char(1),@num%2)
  set @num=@num/2
end
select reverse(@numstr)
exec prc_num 8
百度上搜到的
------解决方案--------------------2进制转换为10进制
从Oracle9i开始,提供函数bin_to_num进行2进制到10进制的转换
SQL> select bin_to_num(1,1,0,1) a,bin_to_num(1,0) b from dual;
A B  
13 2  
SQL> select bin_to_num(1,1,1,0,1) from dual;
BIN_TO_NUM(1,1,1,0,1)  
29