当前位置:  数据库>oracle

Oracle 10进制转换2进制

    来源: 互联网  发布时间:2017-04-08

    本文导语: 写了个Oracle转换函数,发现当数据为负数的时候,无法转换,因为业务前端入库的数据是32位,当JAVA进行有符号转换为INT类型的时候,会产生负数,而我要再次转换为二进制进行位的判断,网上找了好多,都不能做有符号数字的...

写了个Oracle转换函数,发现当数据为负数的时候,无法转换,因为业务前端入库的数据是32位,当JAVA进行有符号转换为INT类型的时候,会产生负数,而我要再次转换为二进制进行位的判断,网上找了好多,都不能做有符号数字的转换,因此按照负数的二进制表示法重新写了个函数:

负数的二进制方法的表示方法:例如 -5  
第一步:首先要把5变成101的二进制形式
第二步:再者就是安位取反,(形成前面全是1)010
第三步:在最后加1 形成:11111111 11111111 11111111 11111011


CREATE OR REPLACE FUNCTION NUMBER_2_BIT(V_NUM NUMBER) RETURN VARCHAR IS
  V_RTN VARCHAR(2000);
  V_N1  NUMBER;
  V_N2  NUMBER;
BEGIN
  V_N1 := ABS(V_NUM);
  --如果为正数
  IF SIGN(V_NUM) > 0 THEN
    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;
   
    --dbms_output.put_line('正数结果'||V_RTN);
    
    --补全32位高位0
    SELECT lpad(V_RTN,32,0)
    INTO   V_RTN
    FROM dual;
   
     --dbms_output.put_line('正数补全结果'||V_RTN);
   
  ELSE
    --转换为二进制同时按位取反
    LOOP
      V_N2 := MOD(V_N1, 2);
      IF V_N2 = 1 THEN
        V_N2 := 0;
      ELSIF V_N2 = 0 THEN
        V_N2 := 1;
      END IF;
      V_N1  := ABS(TRUNC(V_N1 / 2));
      V_RTN := TO_CHAR(V_N2) || V_RTN;
      EXIT WHEN V_N1 = 0;
    END LOOP;
   
    --dbms_output.put_line('负数结果'||V_RTN);
   
    --补全32位高位1
    SELECT lpad(V_RTN,32,1)
    INTO   V_RTN
    FROM dual;
   
    --dbms_output.put_line('负数补全1结果'||V_RTN);
   
    --二进制转换为10机制,同时+1
    SELECT SUM(data1) + 1
    INTO V_N1
      FROM (SELECT substr(V_RTN, rownum, 1) * power(2, length(V_RTN) - rownum) data1
              FROM dual
            CONNECT BY rownum


    
 
 

您可能感兴趣的文章:

  • 请赐教;怎样将oracle数据库中的二进制数据输出到网页-急!!!!
  • Oracle建立二进制文件索引的方法
  • 在oracle里如何将String转换成Date?????
  • 请问:ORACLE中的数据取出来后,需不需要进行一定的转换才能变为C语言的数据类型啊?
  • ORACLE 毫秒与日期的相互转换示例
  • 用java怎样实现oracle数据库表和excel数据表的转换
  • Oracle与FoxPro两数据库的数据转换步骤
  • oracle SCN跟TIMESTAMP之间转换
  • Oracle下时间转换在几种语言中的实现
  • Oracle Number型数值存储与转换的实现详解 iis7站长之家
  • MySQL转换Oracle的需要注意的七个事项
  • MySQL数据库向Oracle转换时注意若干问题
  • Oracle Number型数值存储与转换的实现详解
  • 讲解Oracle中的Clob与String类型转换
  • 将mysql转换到oracle必须了解的50件事
  • oracle中to_date详细用法示例(oracle日期格式转换)
  • ORACLE常用数值函数、转换函数、字符串函数
  • Oracle CBO几种基本的查询转换详解
  • Oracle to_char 日期转换字符串语句分享
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3