首页 >

Oracle 10进制转换2进制

数据库|mysql教程Oracle 10进制转换2进制
Oracle教程,Oracle 10进制转换2进制,数据库,
数据库-mysql教程
智睿学校管理系统源码,ubuntu20.04语言,python爬虫成语接龙,08安装php,北仑seolzw
写了个Oracle转换函数,发现当数据为负数的时候,无法转换,因为业务前端入库的数据是32位,当JAVA进行有符号转换为INT类型的时候
bt下载站源码,ubuntu db4,tomcat会影响样式吗,爬虫拍摄过程,php里面的cta,深圳seo快速排名seo技术lzw
asp网络建站公司源码,vscode配置本地插件,ubuntu不待机,tomcat图标如何换掉,安卓服务端sqlite,做爬虫对电脑的要求高吗,php路径问题,廊坊最好的seo外包,企业网站模块种类,phpcms 酒店模板下载lzw

写了个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 <= length(V_RTN)); — dbms_output.put_line('转换为十进制数结果'||V_RTN); —-转换为二进制
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(‘负数补全0结果’||V_RTN);

END IF;

RETURN V_RTN;
END;


Oracle 10进制转换2进制
  • 利用Oracle逻辑备份恢复已有的数据库
  • 利用Oracle逻辑备份恢复已有的数据库 | 利用Oracle逻辑备份恢复已有的数据库 ...

    Oracle 10进制转换2进制
  • Linux下Oracle10_Dataguard配置与应用
  • Linux下Oracle10_Dataguard配置与应用 | Linux下Oracle10_Dataguard配置与应用 ...

    Oracle 10进制转换2进制
  • 在Oracle的子查询中使用some,any和all
  • 在Oracle的子查询中使用some,any和all | 在Oracle的子查询中使用some,any和all ...