Oracle 中的进制转换
Oracle 中的进制转换
*/-->
Oracle 中的进制转换
Table of Contents
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
Oracle 中的进制转换的更多相关文章
- JS中的进制转换
1 前言 js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现. 仅作为记录. 2 代码 //10进制转为16进制 (10).to ...
- java中16进制转换10进制
java中16进制转换10进制 public static void main(String[] args) { String str = "04e1"; String myStr ...
- java中的进制转换
java中的进制转换及转换函数 转自:https://blog.csdn.net/V0218/article/details/74945203 Java的进制转换 进制转换原理 十进制 转 二进制: ...
- Guid和Oracle中16进制字符的转换
我们知道在Oracle中存的guid是16进制字符串,而在我们的C#代码中存的是guid对象,这样我会就要进行转换, 下面给出了两者进行转换的方法: public class Guid2RawProc ...
- JS中的进制转换以及作用
js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现: //10进制转为16进制 ().toString() // =>&q ...
- iOS蓝牙中的进制转换
Bluetooth4.0.jpg 最近在忙一个蓝牙项目,在处理蓝牙数据的时候,经常遇到进制之间的转换,蓝牙处理的是16进制(NSData),而我们习惯的计数方式是10进制,为了节省空间,蓝牙也会把16 ...
- iOS蓝牙中的进制转换,数据格式转换
最近在忙一个蓝牙项目,在处理蓝牙数据的时候,经常遇到进制之间的转换,蓝牙处理的是16进制(NSData),而我们习惯的计数方式是10进制,为了节省空间,蓝牙也会把16进制(NSData)拆成2进制记录 ...
- python中的进制转换
python中常用的进制转化通常有两种方法: 1.用内置函数hex(),oct(),bin(),对应的数字表示为0x,0o,0b,功能是把十进制数字转化为其他进制 >>> int( ...
- Delphi中的进制转换
二进制转换 function binToDec(Value: string): integer; var str: string; i: integer; begin Str := UpperCase ...
随机推荐
- web开发:jquery之DOM
一.文档结构 二.文档操作 三.文档操作案例 四.form表单 五.正则 六.form案例 一.文档结构 ```jsvar $sup = $('.sup');console.log($sup.chil ...
- Hadoop_20_MapReduce程序的运行模式
1.MapReduce程序的运行模式 1. Windows中运行MapReduce程序 (1)mapreduce程序是被提交给LocalJobRunner在本地以单进程的形式运行 (2)而处理的数据及 ...
- Jmeter官方插件实现Dubbo接口测试
目前主流的分布式框架有Dubbo和SpringCloud, SpringCloud是基于Http协议的分布式框架,Dubbo是基于RPC的分布式框架,Jmeter没有内置对Dubbo接口的支持,很难直 ...
- C++ 内存泄露和内存越界
内存泄露:分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃内存越界: 打个比方 就是你有一个500ml的水瓶,然后你倒在瓶里的水大于500ml 那个多余的就会流出来... 1. 原理分析经常有些新 ...
- WebRtc的一些基本概念
GCC:Google Congestion Control,谷歌提出的拥塞控制算法 REMB:Receiver Estimated Maximum Bitrate, 接收端最大接收码率估测,接收端会 ...
- Filtering Approaches for Real-Time Anti-Aliasing(2011 SIGGRAPH)
Filtering Approaches for Real-Time Anti-Aliasing(2011 SIGGRAPH) 在2011的SIGGRAPH上,NVIDA提出了FXAA3.1,本文主要 ...
- 【Android-PopupMenu控件】 自定义标题栏+PopupMenu菜单
效果图 1.布局文件 layout_main.xml 中间标题栏,左右各一个按钮. <LinearLayout xmlns:android="http://schemas.androi ...
- http message
- Linux 文件查看
链接:https://www.nowcoder.com/questionTerminal/fb39fbeec71f43a3a16edeb0bc98f4ac 来源:牛客网 /var/log/messag ...
- codeforces364D
Ghd CodeForces - 364D John Doe offered his sister Jane Doe find the gcd of some set of numbers a. Gc ...