任何一个实数都是可以表示为: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 中符号%3e,Oracle数据类型-----(数字格式)相关推荐

  1. Oracle中的常用的数据类型

    Oracle中的常用的数据类型: 1.字符类型: 字符串数据类型还可以依据存储空间分为固定长度的"char",和可变长度类型的vachar.nvchar两种: Char类型: Ch ...

  2. oracle中的to_number,Oracle中to_number()函数的用法

    to_number()函数是oracle中常用的类型转换函数之一,是将一些处理过的按一定格式编排过的字符串变回数值型的格式. 1.to_number()函数可以将char或varchar2类型的str ...

  3. oracle中rollback用法,Oracle中SAVEPOINT和ROLLBACK用法

    savepoint是事务内部允许部分rollback的标志符.因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点.如果遇到错误,就可以rollback到不同的点或直接回来事 ...

  4. Excel 2007中创建或删除自定义数字格式

    Excel 2007提供了许多内置数字格式,但如果这些格式无法满足您的需要,您可以自定义内置数字格式以便创建自己的数字格式. 创建自定义数字格式 1.打开要创建并存储自定义数字格式的工作簿. 2.在& ...

  5. oracle中查询四舍五入,Oracle SQL语句实现数字四舍五入取整

    取整(向下取整): select floor(5.534) from dual; select trunc(5.534) from dual; 上面两种用法都可以对数字5.534向下取整,结果为5. ...

  6. oracle中=符号的意义

    => 是 Oracle 中调用 存储过程的时候, 指定 参数名进行调用. 一般是, 某些参数有默认值的时候,你需要跳过某些参数来进行调用. 下面是具体的例子. 参数的默认值 SQL> CR ...

  7. oracle中各种函数,oracle中常用函数大全

    1.数值型常用函数 函数 返回值 样例 显示 ceil(n) 大于或等于数值n的最小整数 select ceil(10.6) from dual; 11 floor(n) 小于等于数值n的最大整数 s ...

  8. oracle中正则表达式规则,Oracle中的正则表达式(及函数)详解

    1.概述 相信大家对正则表达式都不陌生,从linux下的命令到Java等编程语言,正则表达式无处不在,虽然我们实际使用的时候也并不一定太多,但是当我们要处理字符串时,它确实是一个强大的工具. 上一篇文 ...

  9. oracle中正则表达式规则,Oracle SQL 正则表达式

    From:http://blog.sina.com.cn/s/blog_69e7b8d701012tuj.html 在oracle数据库当中有字符处理的函数,比如substr().replace()和 ...

  10. oracle中%type用法,oracle中declare用法

    第8 章 函数与存储过程 Oracle数据库中不仅可以使用单条语句对数据库进行 数据库中不仅可以使用单条语句对数据库进行 查操作,而且可以多条语句组成一个语句块, 增.删.改.查操作,而且可以多条语句 ...

最新文章

  1. oracle无创建directory权限,【DIRECTORY】普通用户创建Oracle DIRECTORY数据库对象的权限需求及探索...
  2. 最新视觉Transformer综述(2017-2020年)
  3. Java EE(五)
  4. mybatis中的#{}和${}区别,和使用场景
  5. undefined reference to '__android_log_print'解决方案
  6. MongoDB学习笔记~大叔分享批量添加—批量更新—批量删除
  7. oracle 字段和当前时间比较,请教如何按照当前时间与数据库表中的字段时间比较提取记录,涉及跨天...
  8. 图的遍历:深度优先遍历(DFS)
  9. 阿里巴巴服务器泡进“水里”液冷服务器技术
  10. A002-181-2162
  11. JAVA服务实例内存高问题排查及解决
  12. zigbee 报警联动方案原理
  13. 给树莓派配置VNC,设置开机自启
  14. 基于可持久化内存-AEP的KV存储引擎
  15. 小程序服务器token,小程序-登录-token
  16. 程序员的经济学系列——你不可不知的生存智慧——第一篇:小X是要成为IT精英的男人!...
  17. SCI、EI及影响因子
  18. Parallels 16已可在支持Windows的M1 Mac上运行
  19. Structs2 框架笔记(一)配置文件及struts.xml常用配置
  20. 展望2022元宇宙会有哪些趋势

热门文章

  1. IT-梦想|永无止境
  2. MySQL的一级索引和二级索引介绍
  3. 再好的技术,再完美的规章,也无法取代人自身的素质和责任心
  4. 灰色线性回归组合预测模型及R语言实现
  5. Python教程传送门,手把手带你学会Python!
  6. FREEIPA:ipa-server的部署使用
  7. 传奇私服架设入门教程分享
  8. 怎么测试网站访问速度?
  9. 《东周列国志》第七十回 杀三兄楚平王即位 劫齐鲁晋昭公寻盟
  10. Java反射基础指南