VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

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)