Oracle 11g

number 任意精度数字类型

存储数据的范围

正数:1 x 10-130 to 9.99...9 x 10125 ,数据精度为38个有效数字

负数:-1 x 10-130 to 9.99...99 x 10125,数据精度为38个有效数字

零:0

无穷大:仅仅只可以从oracle 5中导入

描述

标度scale代表小数部分的数字位数,scale∈[-84,127],s缺省为0;

精度precision代表所有数字的位数,precision∈[1,38],p缺省为最大限度内的任意值。

一般的精度可以大于等于标度,oracle中精度也可以小于标度,如numeri(3,6),该字段只能插入小于0.001的值,即0.0009,0.0008等等,小数点后尾数超出标度的位数将会四舍五入省去。

几个常见形式

Number 或者Number(*), (user_tab_column查询结果中data_precision=null,data_scale=null),此时可以存储极限内任意Precision和scale的值。

Number(*,scale), (user_tab_column查询结果中data_precision=null,data_scale=scale)此时可以存储极限内任意precision的值;

Number(precision), 此时scale缺省为0,等价于number(precision,0);

Number(precision,scale), precision∈[1,38],scale∈[-84,127]。

例子

Input Data

Specified As

Stored As

7,456,123.89

NUMBER

7456123.89

7,456,123.89

NUMBER(*,1)

7,456,123.89

NUMBER(9)

7456124

7,456,123.89

NUMBER(9,2)

7456123.89

7,456,123.89

NUMBER(9,1)

7,456,123.89

NUMBER(6)

(not accepted, exceeds precision)

7,456,123.89

NUMBER(7,-2)

7456100

我的个人测试例子(oracle Release 10.2.0.1.0)如下,得出小结论:number最多能存储126位整数(超出126位后会溢出报错),能准确存储最高40位的整数(大于40切小于等于126的整数,超出40位的部分四舍五入后补为0),当有整数和小数时,整数部分最多能准确存储38位。

SQL> create table test0(id int,num number);

表已创建。

SQL> insert into test0 values(1,123456789123456789123456789123456789123456789123

456789123456789123456789123456789123456789123456789123456789123456789123456789);--126

已创建 1 行。

提交完成。

SQL> insert into test0 values(2,123456789123456789123456789123456789123456789123

4567891234567891234567891234567891234567891234567891234567891234567891234567891)

;--127

insert into test0 values(2,12345678912345678912345678912345678912345678912345678

91234567891234567891234567891234567891234567891234567891234567891234567891)

*

第 1 行出现错误:

ORA-01426: 数字溢出

SQL> insert into test0 values(3,1234567891234567891234567891234567891234);--40

已创建 1 行。

提交完成。

SQL> insert into test0 values(4,12345678912345678912345678912345678912345);--41

已创建 1 行。

提交完成。

SQL> insert into test0 values(6,1234567891234567891234567891234567891234.567);--【40,3】

已创建 1 行。

提交完成。

SQL> insert into test0 values(7,123456789123456789123456789123456789123.4567);--【39,4】

已创建 1 行。

提交完成。

SQL> insert into test0 values(8,12345678912345678912345678912345678912.34567);--【38,5】

已创建 1 行。

提交完成。

SQL> select * from test0;

ID NUM

---------- ----------

1 1.235E+125

3 1.2346E+39

4 1.2346E+40

6 1.2346E+39

7 1.2346E+38

8 1.2346E+37

通过JDBC获取到的数据是:

System.out.println(rs.getInt(1)+","+rs.getBigDecimal(2)+","+rs.getBigDecimal(2) .toString().length());

print

-----------------------------------------

1,123456789123456789123456789123456789123500000000000000000000000000000000000000000000000000000000000000000000000000000000000000,126

3,1234567891234567891234567891234567891234,40

4,12345678912345678912345678912345678912300,41

6,1234567891234567891234567891234567891235,40

7,123456789123456789123456789123456789123,39

8,12345678912345678912345678912345678912.35,41

Postgresql 9.3

Numeric任意精度数字类型

存储空间:变长

描述:用户声明精度,位数精确。

范围:小数点以前最多131072位,小数点以后最多16383位。

标度(scale):是小数部分的位数,scale>=0

精度(precision):是全部数据位的数目,也就是小数点两边的位数总和。

仅支持精度>=标度。

例子:数字23.5141的精度为6而标度为4。可以认为整数的标度scale为零。

常见形式:

numeric字段的最大精度和最大标度都是可以配置的。要声明一个字段的类型为numeric,可以用下面的语法:

NUMERIC(precision, scale),其中precision>0,scale>=0。

NUMERIC(precision),此时即scale缺省为0,即等价于NUMERIC(pre3cision,0)。

NUMERIC不带任何精度与标度的声明,则创建一个可以存储一个直到实现精度上限的任意精度和标度的数值,一个这样类型的字段将不会把输入数值转化成任何特定的标度,而带有标度声明的 numeric字段将把输入值转化为该标度。

我的个人测试例子(postgresql9.3.4)如下,得出小结论:numeric不同于oracle的number,numeric能准确存储126位,甚至更高位的数字。

jnggzy=> create table ttt1(id int, num numeric);

CREATE TABLE

jnggzy=> insert into ttt1 values(1,123456789123456789123456789123456789123456789

12345678912345678912345678912345678912345678912345678912345678912345678912345678

9);---126

INSERT 0 1

jnggzy=> insert into ttt1 values(1,123456789123456789123456789123456789123456789

12345678912345678912345678912345678912345678912345678912345678912345678912345678

9123456789);---135

INSERT 0 1

jnggzy=> insert into ttt1 values(3,123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789.123456789);--【135,9】

INSERT 0 1

jnggzy=> select * from ttt1;

id | num

----+---------------------------------------------------------------------------

1 | 123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789

1 | 123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789

3 | 123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789.123456789

(3 行记录)

pg数据库numeric对应oracle,Oracle类型number与PG类型numeric对比和转换策略相关推荐

  1. PG数据库版本查看方法,sql语句查pg数据库版本方法

    PG 数据库和 oracle 数据库的查看数据库版本的 sql 语句还不一样. PG 数据库版本查看方法如下: select version() 演示效果图: 喜欢的点个赞❤吧!

  2. pg数据库json数据类型_PostgreSQL与开发者起舞—让数据库更好服务于开发

    写在前面的话:本文内容有对应50分钟视频讲解,有兴趣可以访问PG与开发者共舞. 很多数据库的对比的活动都是基于数据库本身的一些的底层的功能以及纯数据库方面的对比,等等.更多方面数据库是要为应用来服务的 ...

  3. pg数据库json数据类型_PG数据类型

    Name( 姓名 ) Aliases( 别名 ) bigint int8 bigserial serial8 bit [ ( n )] bit varying [ ( n ) ] varbit [ ( ...

  4. oracle数据库在mybatis中的数值类型(NUMBER型)

    oracle数据库的数值类型在mybatis中使用NUMERIC ,而不是NUMBER

  5. Oracle 迁移至 MySQL、PG等分布式数据库,可能遇到的12个典型问题

    近年来,分布式数据库逐渐占据了OLTP领域较大的市场,尤其在互联网领域,MySQL.PG等分布式数据库的应用非常广泛.随着软件国产化.自主可控战略的提出,非互联网企业也开始考虑数据库转型,很多企业原本 ...

  6. oracle 临时表存在哪里_openGauss魔改PG?它能兼容Oracle的数据库表吗?

    作者介绍 洪烨,openGauss Contributor,多年银行业系统架构设计及DBA实战经验,<DB2数据库内部解析与性能调优>作者. openGauss的前世今生 上一篇看到很多朋 ...

  7. Oracle数据同步接口中,对于NUMBER、DATE类型数据,从resultSet中直接获取造成精度丢失的解决方案

    通过JDBC获取ORACLE数据库数据时,返回值统一都是ResultSet对象,就像存储过程中的游标,一行一行的读取数据.对于NUMBER和DATE类型的数据,如果java代码中直接用resultSe ...

  8. Oracle 数据库sql语句查看字符集,PG数据库查询字符集方法

    [Oracle 数据库查询字符集] 查询出 NLS_NCHAR_CHARACTERSET 参数的值即是数据库的字符集. select * from nls_database_parameters; [ ...

  9. oracle typehandler,Mybatis实现自定义的类型转换器TypeHandler

    此文其实是java操作Oracle类型XMLType总结二:使用Mybatis附带的一篇小结. Mybatis实现自定义的转换器,十分的简单,其主要步骤分为三步,这里以操作XMLType类型为例. 第 ...

最新文章

  1. 机器人大潮中暗藏多少伪命题
  2. python程序设计与应用教程鄂大伟_鄂大伟-从零进阶的Python教学与开发之路.pdf
  3. Cannot resolve symbol ‘NotBlank‘ Cannot resolve symbol ‘Email‘ Cannot resolve symbol ‘NotEmpty‘
  4. sgi 之vector
  5. 转载+记录数据增广的八种常用方式
  6. Base 6 FAQ v8
  7. VMware Workstation 11网络桥接可以通,NAT不能与主机通信解决办法
  8. wampserver mysql乱码_ajax +json +php提交mysql数据库 中文乱码(wamp server 本地测试)求解?...
  9. [20150123]热链竞争.txt
  10. eclipse项目build时,提示错误.
  11. lunix remount u盘_使用e2fsck修复损坏的Linux磁盘|Read only|LVM|EXT4-FS
  12. 单播、广播、组播的区别和特点
  13. G-Biosciences Tube-O-DIALYZER系列透析管方案
  14. signature=f81ed620b6d6e6cb4bbe5a4d79d445b8,Lubricating compositions
  15. Day 7 输出m到n之间的素数
  16. Vue开发之基础路由
  17. Android录制桌面视频screenrecord
  18. 数据库候选关键词怎么求_关系模式中候选关键字的图论求解法
  19. CloudBu面试题
  20. 递归方式实现打印一个整数的每一位

热门文章

  1. 2021/4/29刷题
  2. java怎么写合并列sql_SQL STUFF函数 拼接字符串 多列 合并成一列 转
  3. 【mmdetection系列】mmdetection之backbone讲解
  4. WPTools改进了光标定位算法和RTF编写器
  5. PaddleWeekly | 量化图像感知相似度,这款工具箱超好用!
  6. 视频字幕API接口文档
  7. ATECLOUD智能云测试平台-测试测量/仪器程控/工业控制/上位机开发软件
  8. 2021年6月国产数据库大事记
  9. Windows打开软件老是弹出无法验证发布者
  10. 12306极速全自动抢票