数值数据类型
📄字数 2.4K
👁️阅读量 加载中...
XuguDB支持所有标准SQL数值类型,包括:
- 整数类型(TINYINT、SMALLINT、INTEGER和BIGINT)
- 固定精度类型(NUMERIC、DECIMAL、NUMBER)
- 浮点类型(FLOAT、DOUBLE)
整数数据类型
整数类型将数据存储为整数,表示为定长、精确的数。
下表展示了不同整数数据类型的字节长度和表示范围:
数据类型 | 字节长度 | 最小值 | 最大值 |
---|---|---|---|
TINYINT | 1字节 | -128 | 127 |
SMALLINT | 2字节 | -32768 | 32767 |
INTEGER | 4字节 | -2147483648 | 2147483647 |
BIGINT | 8字节 | -9223372036854775808 | 9223372036854775807 |
提示
- 关键字 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为小数位数。
- 当不指定数据精度与小数位数时,XuguDB默认存储NUMERIC(12,0) 的数值记录。
- 若S为0,则数值无小数部分;若数值小数部分超过S值定义,对数值进行四舍五入。
- 若数值小数部分小于S值定义,对数值进行正常存储。
- 若数值超过定义范围,数据库会抛出错误以确保精度和定义的有效性。
- NUMERIC类型存储最大支持38位,S取值范围为[0,P]。
下表展示了NUMERIC类型的字节长度和表示范围:
数据类型 | 字节长度 | 最小值 | 最大值 |
---|---|---|---|
NUMERIC | 2~17字节 | -1038+1 | 1038-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)。
下表展示了浮点数类型的字节长度和表示范围:
数据类型 | 字节长度 | 最小值(近似) | 最大值(近似) |
---|---|---|---|
FLOAT | 4字节 | -3.402E+38 | 3.402E+38 |
DOUBLE | 8字节 | -1.797E+308 | 1.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 |
+----+--------------+