Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


数值数据类型

📄字数 2.4K
👁️阅读量 加载中...

XuguDB支持所有标准SQL数值类型,包括:

  • 整数类型(TINYINT、SMALLINT、INTEGER和BIGINT)
  • 固定精度类型(NUMERIC、DECIMAL、NUMBER)
  • 浮点类型(FLOAT、DOUBLE)

整数数据类型

整数类型将数据存储为整数,表示为定长、精确的数。

下表展示了不同整数数据类型的字节长度和表示范围:

数据类型字节长度最小值最大值
TINYINT1字节-128127
SMALLINT2字节-3276832767
INTEGER4字节-21474836482147483647
BIGINT8字节-92233720368547758089223372036854775807

提示

  • 关键字 INT、PLS_INTEGER、BINARY_INTEGER是INTEGER的映射类型。
  • 关键字 SHORT是SMALLINT的映射类型。
  • 关键字 LONGINT是BIGINT的映射类型。

整数数据类型使用示例如下:

示例1:

sql
-- INTEGER类型,创建INTEGER类型字段表,插入数据和查询数据
SQL> CREATE TABLE tab_integer_test(col1 INTEGER);
 
SQL> INSERT INTO tab_integer_test VALUES(666);
  
SQL> SELECT * FROM tab_integer_test;
+------+
| COL1 |
+------+
| 666  |
+------+

示例2:

sql
-- INTEGER类型,创建INTEGER类型字段表,插入超出数据表示范围报错处理
SQL> INSERT INTO tab_integer_test VALUES(2147483648);
Error: [E19230] 字段(col_no:0,col_name:COL1)值错误(数值超界)

对于整型类型TINYINT、SMALLINT、BIGINT存在以上示例相同特性,对于超出表示范围后的数据报错处理。可根据不同的表示范围选择不同的整型类型。

固定精度数据类型

NUMERIC(DECIMAL或NUMBER)是一种高精度数值数据类型,用于存储精确的小数或大整数,其采用十进制存储机制,专为需要绝对精度计算的场景设计,它通过固定精度(Precision)和小数位数(Scale)来确保数值的准确性,可避免浮点数计算带来的舍入误差。

标准SQL定义:NUMERIC(P,S),其中P为数据精度,S为小数位数。

  1. 当不指定数据精度与小数位数时,XuguDB默认存储NUMERIC(12,0) 的数值记录。
  2. 若S为0,则数值无小数部分;若数值小数部分超过S值定义,对数值进行四舍五入。
  3. 若数值小数部分小于S值定义,对数值进行正常存储。
  4. 若数值超过定义范围,数据库会抛出错误以确保精度和定义的有效性。
  5. NUMERIC类型存储最大支持38位,S取值范围为[0,P]。

下表展示了NUMERIC类型的字节长度和表示范围:

数据类型字节长度最小值最大值
NUMERIC2~17字节-1038+11038-1

提示

  • 关键字DECIMAL、NUMBER是NUMERIC的映射类型。

固定精度类型使用示例如下:

示例3:

sql
-- NUMERIC类型,创建NUMERIC类型字段表,插入数据和查询数据
SQL> CREATE TABLE tab_numeric_test(id INT,col1 NUMERIC(6,2));
 
SQL> INSERT INTO tab_numeric_test VALUES(1,6666.66);
  
SQL> SELECT * FROM tab_numeric_test;
+----+---------+
| ID |  COL1   |
+----+---------+
| 1  | 6666.66 |
+----+---------+

示例4:

sql
-- NUMERIC类型,插入数据小数部分超过S值定义,对数值进行四舍五入
SQL> INSERT INTO tab_numeric_test VALUES(2,6666.664);

SQL> INSERT INTO tab_numeric_test VALUES(3,6666.665);

SQL> INSERT INTO tab_numeric_test VALUES(4,6666.666);
  
SQL> SELECT * FROM tab_numeric_test WHERE id >= 2;
+----+---------+
| ID |  COL1   |
+----+---------+
| 2  | 6666.66 |
| 3  | 6666.67 |
| 4  | 6666.67 |
+----+---------+

示例5:

sql
-- 表tab_numeric_test字段定义NUMERIC(6,2),表示总共有6位数字,其中小数点后有2位,最大支持到9999.99
-- 插入数值超过定义范围,数据库会抛出错误以确保精度和定义的有效性数值
SQL> INSERT INTO tab_numeric_test VALUES(5,99999.99);
Error: [E19230] 字段(col_no:1,col_name:COL1)值错误(数值超界)

浮点数据类型

浮点数是一种用于表示实数的数据类型,在计算机科学和工程中广泛使用。由于计算机内存有限,浮点数通过近似的方式表示实数,这种表示方法基于IEEE754标准。

XuguDB提供两种浮点数据类型FLOAT和DOUBLE:

  • FLOAT:单精度浮点型数据类型,可存储7位有效数的数据。
  • DOUBLE:双精度浮点型数据类型,可存储16位有效数的数据。

浮点数还可表示一些特殊值,如正无穷(INF/INFINITY)、负无穷(-INF/-INFINITY)、非数值(NaN)。

下表展示了浮点数类型的字节长度和表示范围:

数据类型字节长度最小值(近似)最大值(近似)
FLOAT4字节-3.402E+383.402E+38
DOUBLE8字节-1.797E+3081.797E+308

提示

  • 关键字REAL、BINARY_FLOAT是FLOAT的映射类型。
  • 关键字BINARY_DOUBLE是DOUBLE的映射类型。

浮点类型使用示例如下:

示例6:

sql
-- FLOAT类型,创建FLOAT类型字段表,插入数据和查询数据
SQL> CREATE TABLE tab_float_test(id INT,col1 float);
 
SQL> INSERT INTO tab_float_test VALUES(1,6666.66);

SQL> INSERT INTO tab_float_test VALUES(2,'INF');

SQL> INSERT INTO tab_float_test VALUES(3,'-INF');

SQL> INSERT INTO tab_float_test VALUES(4,'NaN');
  
SQL> SELECT * FROM tab_float_test;
+----+--------------+
| ID |     COL1     |
+----+--------------+
| 1  | 6.666660e+03 |
| 2  | Inf          |
| 3  | -Inf         |
| 4  | NaN          |
+----+--------------+