oracle number长度转换,Oracle Number型数值存储与转换的实现详解
Oracle在数据库内部通过相应的算法转换来进行数据存储,本文简单介绍Oracle的Number型数值存储及转换.这个内容是为了回答留言板上的2119号问题.
我们可以通过DUMP函数来转换数字的存储形式,一个简单的输出类似如下格式:
复制代码 代码如下:
SQL> select dump(1) from dual;DUMP(1)
------------------
Typ=2 Len=2: 193,2
DUMP函数的输出格式类似:
类型 ,符号/指数位 [数字1,数字2,数字3,......,数字20]
各位的含义如下:
1.类型: Number型,Type=2 (类型代码可以从Oracle的文档上查到)
2.长度:指存储的字节数
3.符号/指数位
在存储上,Oracle对正数和负数分别进行存储转换:
正数:加1存储(为了避免Null)
负数:被101减,如果总长度小于21个字节,最后加一个102(是为了排序的需要)
指数位换算:
正数:指数=符号/指数位 - 193 (最高位为1是代表正数)
负数:指数=62 - 第一字节
4.从开始是有效的数据位
从开始是最高有效位,所存储的数值计算方法为:
将下面计算的结果加起来:
每个乘以100^(指数-N) (N是有效位数的顺序位,第一个有效位的N=0)
5. 举例说明
复制代码 代码如下:
SQL> select dump(123456.789) from dual;DUMP(123456.789)
-------------------------------
Typ=2 Len=6: 195,13,35,57,79,91
: 195 - 193 = 2
13 - 1 = 12 *100^(2-0) 120000
35 - 1 = 34 *100^(2-1) 3400
57 - 1 = 56 *100^(2-2) 56
79 - 1 = 78 *100^(2-3) .78
91 - 1 = 90 *100^(2-4) .009
123456.789
复制代码 代码如下:
SQL> select dump(-123456.789) from dual;DUMP(-123456.789)
----------------------------------
Typ=2 Len=7: 60,89,67,45,23,11,102
62 - 60 = 2(最高位是0,代表为负数)
101 - 89 = 12 *100^(2-0) 120000
101 - 67 = 34 *100^(2-1) 3400
101 - 45 = 56 *100^(2-2) 56
101 - 23 = 78 *100^(2-3) .78
101 - 11 = 90 *100^(2-4) .009
123456.789(-)
现在再考虑一下为什么在最后加102是为了排序的需要,-123456.789在数据库中实际存储为
60,89,67,45,23,11
而-123456.78901在数据库中实际存储为
60,89,67,45,23,11,91
可见,如果不在最后加上102,在排序时会出现-123456.789
对于2119号提问,第一个问题是:
1.请问为什么193,2各代表什么意思?
从上面就可以看到答案了.
2.还有NUMBER数字类型为什么有2个字节的长度呢?
对于这个问题,我想我们应该知道,所有数据类型最终在计算机里都以二进制存储,实际上所谓的数据类型都是我们定义的.所以存储只由算法决定.
所以这个问题是不成立的.比如:
复制代码 代码如下:
SQL> select dump(110) from dual;DUMP(110)
---------------------
Typ=2 Len=3: 194,2,11SQL> select dump(1100) from dual;DUMP(1100)
-------------------
Typ=2 Len=2: 194,12
我们会看到,虽然1100>110,但是存储上1100却只占2字节,而110却占了3个字节.
免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。
oracle number长度转换,Oracle Number型数值存储与转换的实现详解相关推荐
- 汇川小型PLC梯形图编程系列教程(七):数值存储与二进制数据知识详解
原文链接:汇川小型PLC梯形图编程系列教程(七):数值存储与二进制数据知识详解 PLC数据存储原理简介 H123U小型PLC内部采用的是32位的处理器,PLC中的数据处理和电脑中的数据处理基本是一致的 ...
- 汇川plc可以用C语言吗,汇川小型PLC梯形图编程系列教程(七):数值存储与二进制数据知识详解...
PLC数据存储原理简介 H123U小型PLC内部采用的是32位的处理器,PLC中的数据处理和电脑中的数据处理基本是一致的.所有的CPU进行数据处理时,都是将其他进制的数据转换成二进制数进行加减乘除运算 ...
- Windows系统里Oracle 11g R2 Client(64bit)的下载与安装(图文详解)
1.全网最详细的Windows系统里Oracle 11g R2 Client(64bit)的下载与安装(图文详解) 方法地址:https://www.cnblogs.com/zlslch/p/9273 ...
- 有序标称变量(Categorical Features)编码为数值变量(Continuous Features)详解及实践
有序标称变量(Categorical Features)编码为数值变量(Continuous Features)详解及实践 有一个带顺序的分类特征(例如,高.中.低) 使用pandas DataFra ...
- oracle home 命令,$ORACLE_HOMEbin目录下所有命令的使用方法及命令详解
求$ORACLE_HOME/bin目录下所有命令的使用方法及命令详解 如题. $ORACLE_HOME/bin目录下有很多命令,那我们平时用到的也不是太多,即使用到的那部分可能用法也不是完全能掌握,所 ...
- 阿里云大数据型实例规格族d1配置性能详解
阿里云大数据型实例规格族d1配置性能CPU.内存.适用场景.d1实例规格族,InstanceTypes分享大数据型实例规格族d1实例详解: 大数据型实例规格族d1配置特性 I/O优化实例 仅支持SSD ...
- P型MOS管开关电路及工作原理详解-KIA MOS管
P型MOS管开关电路图 PMOS是指n型衬底.p沟道,靠空穴的流动运送电流的MOS管. P沟道MOS晶体管的空穴迁移率低,因而在MOS晶体管的几何尺寸和工作电压绝对值相等的情况下,PMOS晶体管的跨导 ...
- oracle自定义长度异常,Oracle 自定义wmsys.wm_concat 避免长度限制
Oracle自定义wmsys.wm_concat避免长度限制网上搜索到这段类似代码但是长度过程还是不行,经过我的修改,亲测可以. CREATEORREPLACETYPEZH_CONCAT_IM AUT ...
- Oracle索引、视图、序列、同义词、事务、锁机制详解
索引 什么是索引? -- 索引就类似于书的目录,根据目录查询内容会快很多,提高数据查询效率 创建索引有俩种方式 1.Oracle会自动为主键和唯一键创建索引 2.手动创建约束. 那么表中什么样的字段应 ...
最新文章
- 打造具备互补测试技能的团队
- ios-晋级之路 CocoaPods引用第三方库不import不自动补齐
- linux 逻辑运算符and,布尔逻辑运算符
- 创建一个 Django 项目
- 申请贷款必须留联系人吗?不留行不行?
- PDF.js开发笔记
- jboss 4.3.0_JBoss BPM Suite 6.0.3版本的5个实用技巧
- 为什么蚂蚁金服架构师建议从Zookeeper开始提升技术水平?
- 为PHP开发搭建环境
- 剑指offer--二叉树中和为某一值得路径
- 《101 Windows Phone 7 Apps》读书笔记-TODO LIST
- 服务端Latex解析成图片或者HTML或者SVG方案
- 【三维路径规划】基于matlab改进粒子滤波无人机三维路径规划【含Matlab源码 1269期】
- 单结晶体管的导电特性_【硬见小百科】二极管基础知识分类,应用,特性,原理,参数(二)...
- 前端json文件模拟数据与后台交互
- 网站文章内容发现重复率过高的解决办法
- 10大习惯让你变年轻
- 开源GIS(十八)——分辨率与比例尺
- springboot 全局时间转换器
- 《数据结构》—— 二叉树的复制、查深度与算结点操作
热门文章
- oracle等待事件查询,Oracle查看等待事件_yh_zeng2的博客-CSDN博客
- iso qemu 安装ubuntu_我该如何安装qemu?
- 苹果手机内存怎么查_为什么苹果手机内存越用越小
- 鼠标划过图片进行缩放效果
- kafka消息队列的概念理解
- 使用lucene实现简单的全文检索
- (一)在Azure上创建完整的无服务器云原生应用程序
- Blazor Hydra——在单个站点上托管多个Blazor SPA
- HigLabo.Mapper,用表达式树在10天内创建世界上最快的对象映射器
- python语言goto_如何在 Python 中实现 goto 语句