Number数据类型
功能描述
Vastbase在Oracle兼容模式下支持Number数据类型。Number数据类型用于存储定点数和浮点数,精度可达40位。
注意事项
该功能仅在数据库兼容模式为Oracle时支持(即数据库初始化时指定DBCOMPATIBILITY='A')。
如果在NUMBER(precision, scale)列中插入数字,如果数字的整数位超过了precision则报错,如果小数位超过了scale则将对该值进行四舍五入。
语法格式
对于数字列,用户可以通过如下形式指定列:
column_name NUMBER
指定精度(总位数)和小数位数(小数点右侧的位数):
如果未指定精度,则列将存储给定的值。
如果未指定小数位数,则小数位数为零。
column_name NUMBER (precision[, scale])
参数说明
column_name
列名。
precision
精度,即NUMBER列的总位数,从左边第一个不为0的数字算起。
取值范围:[1,40],默认最大精度值为40。
scale
表示小数位数,即精确到小数点右侧的位数。
取值范围:[0,precision]
示例
示例1 不同列定义方式,输入数据的存储结果对比:
指定方式 输入数据 存储方式 说明 NUMBER 7456123.89 7456123.89 根据数据实际存储。 NUMBER(9) 7456123.89 7456124 指定最大精度为9,小数位取默认值0,即四舍五入后仅保留整数位。 NUMBER(9,2) 7456123.89 7456123.89 指定最大精度为9位,小数位数为2位。 NUMBER(9,1) 7456123.89 7456123.9 指定最大精度为9位,四舍五入后小数位数保留1位。 NUMBER(6) 7456123.89 超过精度,报错 实际数据的整数位超过了类型定义的精度,则报错 示例2 number类型数据调用。
未指明precision和scale:
select (123.56::number); select (-123.56::number);
返回结果为如下:
number -------- 123.56 (1 row) ?column? ---------- -123.56 (1 row)
指明precision:
select (123.56::number(3)); select (123.56::number(4)); select (-123.56::number(3)); select (-123.56::number(4));
返回结果为如下:
number -------- 123.56 (1 row) ?column? ---------- -123.56 (1 row) number -------- 124 (1 row) number -------- 124 (1 row)
指明precision和scale:
select (123.56::number(4,2));--报错 select (123.56::number(5,2)); select (-123.56::number(4,2));--报错 select (-123.56::number(5,2));
返回结果为如下:
ERROR: value overflows number format DETAIL: A field with precision 4, scale 2 must round to an absolute value less than 10^2. CONTEXT: referenced column: number number -------- 123.56 (1 row) ERROR: value overflows number format DETAIL: A field with precision 4, scale 2 must round to an absolute value less than 10^2. ?column? ---------- -123.56 (1 row)