`

Oracle数据类型-----(数字格式)

阅读更多
任何一个实数都是可以表示为:S=A.B*10n(10的n次方)。则我们只是需要存储A.B(数据部分),n(最高表示位)即可。可是oracle 还存储了符号位(负数需要用到)。

create table test_number ( num_col number);

SQL> INSERT INTO TEST_NUMBER VALUES (0);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (1);

1 row inserted

SQL>  INSERT INTO TEST_NUMBER VALUES (2);

1 row inserted

SQL>  INSERT INTO TEST_NUMBER VALUES (25);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (123);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (4100);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (132004078);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (2.01);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (0.3);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (0.00000125);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (115.200003);

1 row inserted

SQL>  INSERT INTO TEST_NUMBER VALUES (-1);

1 row inserted

SQL>  INSERT INTO TEST_NUMBER VALUES (-2);

1 row inserted

SQL>  INSERT INTO TEST_NUMBER VALUES (-20032);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (-234.432);

1 row inserted

SQL>  COMMIT;

Commit complete



SQL> SELECT NUM_COL, DUMP(NUM_COL, 16) D_NUMBER FROM TEST_NUMBER;

   NUM_COL           D_NUMBER
---------- --------------------------------------------------------------------------------
         0                Typ=2 Len=1: 80
         1                Typ=2 Len=2: c1,2
         2                Typ=2 Len=2: c1,3
        25               Typ=2 Len=2: c1,1a
       123              Typ=2 Len=3: c2,2,18
      4100             Typ=2 Len=2: c2,2a
132004078        Typ=2 Len=6: c5,2,21,1,29,4f
      2.01              Typ=2 Len=3: c1,3,2
       0.3               Typ=2 Len=2: c0,1f
   1.25E-6            Typ=2 Len=3: be,2,1a
115.200003        Typ=2 Len=6: c2,2,10,15,1,4
        -1                Typ=2 Len=3: 3e,64,66
        -2                Typ=2 Len=3: 3e,63,66
    -20032            Typ=2 Len=5: 3c,63,65,45,66
  -234.432           Typ=2 Len=6: 3d,63,43,3a,51,66

15 rows selected



0 :没有数据部分,只存储了一个最高表示位。

1 :最高表示位 为 C1 。这是为什么那??

正数和负数具有相同的取值范围,所以,正数的最高表示位 > 80 ; 负数的最高表示位 < 80 。

但是正数部分又分为:大于1的数和小数,并且同样具有相同的取值范围。



计算公式如下:

SQL>  select round( (to_number('ff','xx') - to_number('80','xx'))/2 + to_number('80','xx') ) + 1 from dual ;

ROUND((TO_NUMBER('FF','XX')-TO
------------------------------
                           193

SQL> select to_char('193','xx') from dual;

TO_CHAR('193','XX')
-------------------
c1

所以,个数的最高表示位为:C1。

则百位的最高表示位为C2,万位的最高表示位为C3,百分位的最高表示位为C0,万分位的最高表示位为C0,以此类推。

这又是为什么哪?

Oracle每个字节表示2位数,两位数之间相差的是100(即10的平方)。所以百位的最高表示位为C2.



但是oracle又为什么用0x2表示1哪???

对于这个2位数,出现的可能是0~99共100种可能,问题出在0这里。Oracle底层是用C语言实现的,我们知道二进制0在C语言中用作字符串终结符,Oracle为了避免这个问题,因此使用了0x1表示0,并依次类推,使用0x64表示99。



-1                Typ=2 Len=3: 3e,64,66 , 最高表示位 为什么 是 3e??

因为,负数和正数互为相反数。其最高表示位相加为 255 , 数据部分相加为:66 。所以-1的最高表示位为 3e。

SQL> select to_char('193','xx') from dual;

TO_CHAR('193','XX')
-------------------
c1

SQL> select to_number('3e','xx') from dual ;

TO_NUMBER('3E','XX')
--------------------
                  62

负数的数据部分用 65 到 2 进行表示。

分享到:
评论

相关推荐

    Oracle基本数据类型存储格式浅析

    Oracle基本数据类型存储格式浅析(二)——数字类型 Oracle基本数据类型存储格式浅析(三)——日期类型 Oracle基本数据类型存储格式浅析(四)——ROWID类型 Oracle基本数据类型存储格式浅析(五)——RAW类型

    Oracle 数据类型

    7、LOB数据类型用于存储大型的,没有被结构化的数据,例如二进制文件,图片文件,LOB主要分为BLOB和CLOB,BLOB数据类型用于存储二进制对象:图像,音频,视频...CLOB数据类型用于存储字符格式的大型对象 8、ORACLE...

    oracle支持的数据类型

    常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 ...数据类型 参数 描述 char(n) n=1 to 2000字节 定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)

    ORACLE中的数据类型.doc

    ORACLE中的数据类型.doc 当你在数据库中创建数据表的时候,你需要定义表中所有字段的类型。ORACLE有许多种数据类型以满足你的需要。数据类型大约分为:character, number, date, LOB, 和RAW等类型。虽然ORACLE8i也...

    Oracle中trunc()函数用法处理日期、数字类型数据

    Oracle中trunc()函数用法处理日期、数字类型数据

    oracle函数大全.doc

    ORACLE函数大全 _______________________________________...将ROWID数据类型转换为字符类型 47.TO_CHAR(date,'format') SQL&gt; select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual; TO_CHAR(SYSDATE,'YY -----...

    oracle10g教程从入门到精通.doc

    四:oracle表的管理(数据类型,表创建删除,数据CRUD操作) 9 oracle支持的数据类型 10 字符类 10 数字型 10 日期类型 10 建表 10 修改表 11 删除表 11 添加数据 11 修改数据 12 删除数据 12 savepoint a; --创建保存...

    MYSQL,SQLSERVER,ORACLE常用的函数

    SQL&gt; select instr('oracle traning','ra',1,2) instring from dual; INSTRING --------- 9 6.LENGTH 返回字符串的长度; SQL&gt; select name,length(name),addr,length(addr),sal,length(to_char(sal)) from ....

    oracle数据库id为uuid类型时自动生成id

    oracle数据库id为uuid类型时自动生成id的工具类,不再依赖sequence自增长

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。 四、 如何学习 认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 ...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

    5.1.1 Oracle数据存储模型 140 5.1.2 段、区间、块和行 142 5.1.3 文件存储技术 144 5.2 创建和管理表空间 146 5.2.1 创建表空间 146 5.2.2 更改表空间 150 5.2.3 删除表空间 154 5.2.4 OMF 154 5.3 管理表...

    Oracle Database 11g初学者指南--详细书签版

    1.3 Oracle Database 11g的基本数据类型 8 1.3.1 varchar2 8 1.3.2 数字 9 1.3.3 日期 9 1.3.4 时间戳 9 1.3.5 clob 10 1.3.6 blob 10 1.4 表 10 1.5 存储对象 11 1.5.1 视图 12 1.5.2 触发器 12 1.5.3 ...

    ORACLE中科学计数法显示问题的解决

    ORACLE中科学计数法显示问题的解决,PLSQL显示超长数字的时候显示格式为科学计数法,此文档为解决方法

    精髓Oralcle讲课笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...

    通用java程序批量导excel数据到oracle

    请对应好关系,并保证excel数据正确,列如字段是数字类型,excel里是文字,当然会报错。 注意下标从0开始,注意输入法,每次执行前请先用解压文件打开jar,配置好对应关系,保存后再执行导入程序。 可根据需要,自行...

    Oracle11g从入门到精通2

    9.4.1 采用正确的数据类型 9.4.2 存储参数的正确设置 9.4.3 定期回收无用表空间 9.4.4 归档历史表空间 第10章 备份与恢复机制 10.1 备份与恢复的方法 10.2 使用数据泵进行逻辑备份和恢复 10.2.1 使用...

    Oracle数据库表与视图

    用CREATE TABLE语句建立表,在建立表的同时,必须定义表名,列,以及列的数据类型和大小。表名标识一个表,所以应尽可能在表名中描述表,oracle中表名或列名最长可以达30个字符串。表名应该以字母开始,可以在表名中...

    Oracle课件.pdf

    3.1 Oracle常用数据类型 3.2创建表 3.3表的约束 4. 数据操作语言(DML) 4.1数据插入 4.2更新数据 4.3删除数据 4.4 TRUNCATE(DDL命令) 5. 操作符 5.1算术运算 5.2关系运算和逻辑运算 5.3字符串连接操作...

Global site tag (gtag.js) - Google Analytics