首页 > 数据库 >[转帖]Oracle number类型详解

[转帖]Oracle number类型详解

时间:2024-02-12 09:00:24浏览次数:27  
标签:存储 scale number precision 转帖 小数点 Oracle 小数

Oracle number类型详解

简介

Oracle的number类型比较复杂,很多限制,但是掌握一点小技巧就能轻松搞定。

oracle number

基本说明

number(precision,scale)

  1. precision表示数字中的有效位,从左边第一个不为0的数算起,小数点和负号不计入有效位数
  2. precision的取值范围是[1,38]
  3. precision默认值为38,number等价于number(38)
  4. scale大于0,表示数字精确到小数点右边的位数,number(2,3)表示精确到小数点左边3位
  5. scale小于0,表示数字取舍到小数点左边的位数,number(3,-2)表示四色五人到百位,123,变为100
  6. scale的取值范围是[-84,127]
  7. scale默认值为0
  8. number整数部分允许的最大长度为precision-scale
  9. number整数部分的长度 大于 precision-scale 时出错,例如number(3,2)就不能存12.34,因为精度不够
  10. number小数部分的长度 大于 scale时,就会对小数部分多出来的位数四舍五入,例如number(3,1),存储3.1415的时候就会存3.1
  11. scale为负数时,对小数点左边的sacle个数字进行四舍五入,如number(5,-3),存储1234567.89,存储值为1235000,可以看到0没有占有有效位

违背第一直觉的项来了:

scale 大于 precision 时, precision表示小数点后第scale位向左最多可以有多少位数字,如果大于p则出错错,小数点后s位向右的数字四舍五入。

换个思路,换个说法,也许就好理解了。scale大于precision的时候,小数部分的精度大于整个数的精度只可能是一种情况,这个数就是小数,并且多半是0.00…xx这种。

例如,number(2,3),小数部分有3位,但是数据只能精确两位,那就只能存0.012这种,只需存12两位有效数字,如果是0.12这种就存不了,因为0.12三位有效数字就是0.120,存不了这么多位。

容易出错情况

  1. number(8),存储1234567.89是没有问题,因为没有定义小数位,小数位被舍弃合理
  2. number(6),不能存储1234567.89,虽然没有存储小数位,但是整数位也不够
  3. number(9,3),不能存储1234567.89,虽然精度是9位,但是定义了小数位占了3位,只有6位整数位,1234567有7位
  4. number(7,2),不能存储1234567.89,没啥好说的,精度不够,7位不足以存储9位数字
  5. number(2,3),不能存储0.23,小数部分有3位有效数字,0.230,精度只有2位,不足以存储

Number与MySQL数据类型

MySQL数据类型字节大小范围-有符号范围-无符号oracle number
tinyint1 bytes(-128,127)(0,255)number(3)
smallint2 bytes(-32 768,32 767)(0,65 535)number(5)
mediumint3 bytes(-8 388 608,8 388 607)(0,16 777 215)number(8)
integer4 bytes(-2 147 483 648,2 147 483 647)(0,4 294 967 295)number(10)
bigint8 bytes(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)number(20)

Oracle的number和MySQL的decimal非常像,但是在数据类型上区分的更细,能更好的利用存储空间,提高性能。

</article>

标签:存储,scale,number,precision,转帖,小数点,Oracle,小数
From: https://www.cnblogs.com/jinanxiaolaohu/p/17984376

相关文章

  • [转帖]linux参数之max_map_count
    https://www.cnblogs.com/duanxz/p/3567068.html “Thisfilecontainsthemaximumnumberofmemorymapareasaprocessmayhave.Memorymapareasareusedasaside-effectofcallingmalloc,directlybymmapandmprotect,andalsowhenloadingsharedlibr......
  • 创建企业级地理数据库oracle
    创建oracle地理数据库sde之前写过一篇在postgres数据库中创建sde的教程,由于工作需求,现需要在oracle数据库中创建sde并连接使用,现把主要步骤记录下来,以备后续查看方便。有一说一,开源的postgres数据库创建sde不要太方便,关键是人家还有自己的PostGIS插件以支持空间数据表达,闭源的or......
  • 创建企业级地理数据库oracle
    创建oracle地理数据库sde之前写过一篇在postgres数据库中创建sde的教程,由于工作需求,现需要在oracle数据库中创建sde并连接使用,现把主要步骤记录下来,以备后续查看方便。有一说一,开源的postgres数据库创建sde不要太方便,关键是人家还有自己的PostGIS插件以支持空间数据表达,闭源的or......
  • ISO8601 week number of the year
      importdatetimedatetime.date(2023,1,1).isoweekday()defleap_year(year:int)->bool:returnyear%4==0andyear%100!=0oryear%400==0foryearinrange(2001,2101):weekday=datetime.date(year,1,1).isoweekday()......
  • [转帖]二八定律、墨菲定律和阿姆达尔定律
    二八定律20%的人用脖子以上来挣钱80%的人用脖子以下赚钱20%的人正面思考着80%的人负面思考着20%的人买时间80%的人卖时间20%的人做事业80%的人做事情20%的人重视经验80%的人重视学历20%的人知道行动才有结果80%的人认为知识就是力量20%的人我要怎样做......
  • [转帖]网络知识梳理:网络广播
    网络广播是一种网络通信的形式,其中一个发送端向多个接收端同时发送相同的信息。在计算机网络中,这通常涉及到使用特定的广播地址,使得所有连接到该网络的设备都能接收到这些信息。网络广播可以根据范围和用途分为几种类型:1.广播(Broadcasting)定义:在广播中,消息被发送到网络上......
  • [转帖]Unix操作系统的前世今生
    Unix是一种多用户、多任务操作系统,最初由AT&T贝尔实验室的肯·汤普逊(KenThompson)和丹尼斯·里奇(DennisRitchie)等人开发于上世纪70年代初。它被设计成一种通用的操作系统,支持跨多种硬件平台,并提供了许多先进的特性,如多任务处理、分时处理、多用户能力和可移植性。Unix的......
  • less报错,Error evaluating function `unit`: the first argument to unit must be a n
    1、less-loader版本太高了,可以降低版本2、lessc的执行参数里面增加一个参数--math=always3、可以关闭严格模式{loader:"less-loader",options:{lessOptions:{strictMath:false,},},}, 4、vite配置可以设置math:"always",......
  • 【转帖】就是要你懂抓包--WireShark之命令行版tshark
    plantegg.github.io/2019/06/21/就是要你懂抓包--WireShark之命令行版tshark/ 玩转TShark(Wireshark的命令行版)在我感叹Wireshark图形界面的强大时候,有时候也抱怨有点慢,或者感叹下要是有命令行界面版该多好啊,实际上TShark就是WireShark的命令行版,WireShark的功能基本都有,还......
  • Windwo环境下在Oracle表空间、账号新建
      现记录在Window下新建Oracle11g表空间、账号的SQL,以方便日后使用--删除现有表空间DROPTABLESPACENJDT_YY_DEV_V2INCLUDINGCONTENTSANDDATAFILESCASCADECONSTRAINTS; --新建表空间createtablespaceNJDT_YY_DEV_V2datafile'F:/app/TyUsers/oradata/orcl/NJD......