数据仓库服务 GAUSSDB(DWS)-数值类型:任意精度型

时间:2023-11-10 17:34:12

任意精度型

NUMBER类型能够用于存储对于精度位数没有限制的数字,并且可以用于执行精确计算。当要求高精确度时,推荐使用这种类型来存储货币总量和其他类型的数量值。与整数类型相比,任意精度类型需要更大的存储空间,其存储效率、运算效率以及压缩比效果都要差一些。

NUMBER类型数值的范围是小数点右边部分的小数位数。NUMBER类型数值的精度是指整个数值包含的所有数字,也就是小数点左右两边的所有数字。所以,可以说数值23.1234的精度为6,范围是4。可以认为整数的范围是0。

使用Numeric/Decimal进行列定义时,建议指定该列的精度p(总位数)以及范围s(小数位数)。

如果数值的精度或者范围大于列的数据类型所声明的精度和范围,那么系统将会试图对这个值进行四舍五入。如果不能对数值进行四舍五入的处理来满足数据类型的限制,则会报错。

表2 任意精度型

名称

描述

存储空间

范围

NUMERIC[(p[,s])],

DECIMAL[(p[,s])]

精度p取值范围为[1,1000],标度s取值范围为[0,p]。

用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。

未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。

NUMBER[(p[,s])]

NUMERIC类型的别名,为兼容Oracle数据类型。

用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。

未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。

示例:

创建带有DECIMAL数值类型的表。

1
CREATE TABLE decimal_type_t1 (DT_COL1 DECIMAL(10,4));

插入数据。

1
2
INSERT INTO decimal_type_t1 VALUES(123456.122331);
INSERT INTO decimal_type_t1 VALUES(123456.452399);

查看数据。

1
2
3
4
5
6
SELECT * FROM decimal_type_t1;
   dt_col1
-------------
 123456.1223
 123456.4524
(2 rows)
support.huaweicloud.com/sqlreference-dws/dws_06_0009.html