Oracle 中的进制转换

*/-->

Oracle 中的进制转换

1 进制名

进制 英文全名 缩写
2 binary B
8 octal O
10 Decimal D
16 hexadecimal H

2 10进制与16进制互相转换

2.1 10进制转换为16进制

10 进制转换为16进制是通过to_char 来实现的:

SQL> col hex for a20
SQL> select trim(to_char(109834,'xxxxxx')) as hex from dual; HEX
--------------------
1ad0a

2.2 16进制转换为10进制

16进制转换为10进制可以通过to_number来实现:

  SQL> col dec for 999999
SQL> select to_number('1ad0a','xxxxxxxx') as dec from dual; DEC
-------
109834

3 2进制与10进制互相转换

3.1 2进制转10进制

从Oracle9i开始,提供函数bin_to_num进行2进制到10进制的转换

SQL> select bin_to_num(1,0,1,0,1,1) from dual;

BIN_TO_NUM(1,0,1,0,1,1)
-----------------------
43

3.2 10进制转2进制

oracle 没有提供10进制转2进制的函数,不过可以自己写,下面是偷的别人的,

   CREATE OR REPLACE FUNCTION NUM_to_BIn(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;
/

原网页如下:
https://blog.csdn.net/java3344520/article/details/6684814

  • 示例

         SQL> select num_to_bin(-1) from dual;
    
    NUM_TO_BIN(-1)
    --------------------------------------------------------------------------------
    11111111111111111111111111111111 SQL> select num_to_bin(1) from dual; NUM_TO_BIN(1)
    --------------------------------------------------------------------------------
    00000000000000000000000000000001

Author: halberd.lee

Created: 2019-07-28 Sun 19:47

Validate

Oracle 中的进制转换的更多相关文章

  1. JS中的进制转换

    1 前言 js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现. 仅作为记录. 2 代码 //10进制转为16进制 (10).to ...

  2. java中16进制转换10进制

    java中16进制转换10进制 public static void main(String[] args) { String str = "04e1"; String myStr ...

  3. java中的进制转换

    java中的进制转换及转换函数 转自:https://blog.csdn.net/V0218/article/details/74945203 Java的进制转换 进制转换原理 十进制 转 二进制: ...

  4. Guid和Oracle中16进制字符的转换

    我们知道在Oracle中存的guid是16进制字符串,而在我们的C#代码中存的是guid对象,这样我会就要进行转换, 下面给出了两者进行转换的方法: public class Guid2RawProc ...

  5. JS中的进制转换以及作用

    js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现: //10进制转为16进制 ().toString() // =>&q ...

  6. iOS蓝牙中的进制转换

    Bluetooth4.0.jpg 最近在忙一个蓝牙项目,在处理蓝牙数据的时候,经常遇到进制之间的转换,蓝牙处理的是16进制(NSData),而我们习惯的计数方式是10进制,为了节省空间,蓝牙也会把16 ...

  7. iOS蓝牙中的进制转换,数据格式转换

    最近在忙一个蓝牙项目,在处理蓝牙数据的时候,经常遇到进制之间的转换,蓝牙处理的是16进制(NSData),而我们习惯的计数方式是10进制,为了节省空间,蓝牙也会把16进制(NSData)拆成2进制记录 ...

  8. python中的进制转换

    python中常用的进制转化通常有两种方法: 1.用内置函数hex(),oct(),bin(),对应的数字表示为0x,0o,0b,功能是把十进制数字转化为其他进制  >>> int( ...

  9. Delphi中的进制转换

    二进制转换 function binToDec(Value: string): integer; var str: string; i: integer; begin Str := UpperCase ...

随机推荐

  1. web开发:jquery之DOM

    一.文档结构 二.文档操作 三.文档操作案例 四.form表单 五.正则 六.form案例 一.文档结构 ```jsvar $sup = $('.sup');console.log($sup.chil ...

  2. Hadoop_20_MapReduce程序的运行模式

    1.MapReduce程序的运行模式 1. Windows中运行MapReduce程序 (1)mapreduce程序是被提交给LocalJobRunner在本地以单进程的形式运行 (2)而处理的数据及 ...

  3. Jmeter官方插件实现Dubbo接口测试

    目前主流的分布式框架有Dubbo和SpringCloud, SpringCloud是基于Http协议的分布式框架,Dubbo是基于RPC的分布式框架,Jmeter没有内置对Dubbo接口的支持,很难直 ...

  4. C++ 内存泄露和内存越界

    内存泄露:分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃内存越界: 打个比方 就是你有一个500ml的水瓶,然后你倒在瓶里的水大于500ml 那个多余的就会流出来... 1. 原理分析经常有些新 ...

  5. WebRtc的一些基本概念

    GCC:Google Congestion Control,谷歌提出的拥塞控制算法 REMB:Receiver Estimated Maximum Bitrate,  接收端最大接收码率估测,接收端会 ...

  6. Filtering Approaches for Real-Time Anti-Aliasing(2011 SIGGRAPH)

    Filtering Approaches for Real-Time Anti-Aliasing(2011 SIGGRAPH) 在2011的SIGGRAPH上,NVIDA提出了FXAA3.1,本文主要 ...

  7. 【Android-PopupMenu控件】 自定义标题栏+PopupMenu菜单

    效果图 1.布局文件 layout_main.xml 中间标题栏,左右各一个按钮. <LinearLayout xmlns:android="http://schemas.androi ...

  8. http message

  9. Linux 文件查看

    链接:https://www.nowcoder.com/questionTerminal/fb39fbeec71f43a3a16edeb0bc98f4ac 来源:牛客网 /var/log/messag ...

  10. codeforces364D

    Ghd CodeForces - 364D John Doe offered his sister Jane Doe find the gcd of some set of numbers a. Gc ...