
# 数值类型
数值类型也叫数字类型。由1、2、4或8字节的整数以及4或8字节的浮点数和可选精度小数组成。
对应的数字操作符和相关函数，请参见[数字操作函数和操作符](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0163.html)。
Aura支持的数值类型按精度可以分为：整数类型，任意精度型，浮点类型和序列整型。
#### 整数类型
SMALLINT、INTEGER和BIGINT类型存储整个数值（不带有小数部分），也就是整数。如果尝试存储超出范围以外的数值将会导致错误。
常用的类型是INTEGER，一般只有取值范围确定不超过SMALLINT的情况下，才会使用SMALLINT类型。而只有在INTEGER的范围不够的时候才使用BIGINT，因为前者相对快得多。
表1整数类型 
| 名称       | 描述              | 存储空间 | 范围                                                      |
|:---|:---|:---|:---|
| SMALLINT | 小范围整数，别名为INT2。  | 2字节  | -32,768 \~ +32,767                                      |
| INTEGER  | 常用的整数，别名为INT4。  | 4字节  | -2,147,483,648 \~ +2,147,483,647                        |
| BIGINT   | 大范围的整数，别名为INT8。 | 8字节  | -9,223,372,036,854,775,808 \~ 9,223,372,036,854,775,807 |
   
示例：
创建带有SMALLINT、INTEGER、BIGINT类型数据的表。
```
CREATE TABLE int_type_t1 
(
    a SMALLINT, 
    b SMALLINT,
    c INTEGER,
    d BIGINT
) STORE AS orc;
```
插入数据。
```
INSERT INTO int_type_t1 VALUES(100, 10, 1000, 10000);
```
查看数据。
```
SELECT * FROM int_type_t1;
  a  | b  |  c   |   d   
-----+----+------+-------
 100 | 10 | 1000 | 10000
(1 row)
```
#### 任意精度型
使用Numeric/Decimal进行列定义时，建议指定该列的精度p（总位数）以及范围s（小数位数）。
如果数值的精度或者范围大于列的数据类型所声明的精度和范围，那么系统将会试图对这个值进行四舍五入。如果不能对数值进行四舍五入的处理来满足数据类型的限制，则会报错。
表2任意精度型 
| 名称                                                                                                                                                            | 描述                                  | 存储空间                                        | 范围                                      |
|:---|:---|:---|:---|
| NUMERIC\[(p\[,s\])\], DECIMAL\[(p\[,s\])\] | 精度p取值范围为\[1,1000\]，标度s取值范围为\[0,p\]。 | 用户声明精度。每四位（十进制位）占用两个字节，然后在整个数据上加上八个字节的额外开销。 | 未指定精度的情况下，小数点前最大131,072位，小数点后最大16,383位。 |
   
示例：
创建带有DECIMAL数值类型的表。
```
CREATE TABLE decimal_type_t1 (DT_COL1 DECIMAL(10,4)) STORE AS orc;
```
插入数据。
```
INSERT INTO decimal_type_t1 VALUES(123456.122331);
INSERT INTO decimal_type_t1 VALUES(123456.452399);
```
查看数据。
```
SELECT * FROM decimal_type_t1;
   dt_col1
-------------
 123456.1223
 123456.4524
(2 rows)
```
#### 浮点类型
浮点类型属于非精确，可变精度的数值类型。实际上，这些类型通常是对于二进制浮点算术（分别是单精度和双精度）的IEEE标准754的具体实现，在一定范围内由特定的处理器，操作系统和编译器所支持。
表3浮点类型 
| 名称                                                                                                                                          | 描述                                                                                                                                                                                                                                                                                           | 存储空间                                        | 范围                                                                                                                                             |
|:---|:---|:---|:---|
| REAL, FLOAT4             | 单精度浮点数，不精准。                                                                                                                                                                                                                                                                                  | 4字节                                         | 6位十进制数字精度。                                                                                                                                     |
| DOUBLE PRECISION, FLOAT8 | 双精度浮点数，不精准。                                                                                                                                                                                                                                                                                  | 8字节                                         | 1E-307\~1E+308， 15位十进制数字精度。 |
| FLOAT\[(p)\]                                                                                                                                | 浮点数，不精准。精度p取值范围为\[1,53\]。 说明： p为精度，表示总位数。              | 4字节或8字节                                     | 根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示。如不指定精度，内部用DOUBLE PRECISION表示。                                                                             |
| DEC\[(p\[,s\])\]                                                                                                                            | 精度p取值范围为\[1,1000\]，标度s取值范围为\[0,p\]。 说明： p为总位数，s为小数位位数。 | 用户声明精度。每四位（十进制位）占用两个字节，然后在整个数据上加上八个字节的额外开销。 | 未指定精度的情况下，小数点前最大131,072位，小数点后最大16,383位。                                                                                                        |
| INTEGER\[(p\[,s\])\]                                                                                                                        | 精度p取值范围为\[1,1000\]，标度s取值范围为\[0,p\]。                                                                                                                                                                                                                                                          | 用户声明精度。每四位（十进制位）占用两个字节，然后在整个数据上加上八个字节的额外开销。 | 未指定精度的情况下，小数点前最大131,072位，小数点后最大16,383位。                                                                                                        |
   
示例：
创建带有浮点类型的表。
```
CREATE TABLE float_type_t1
(
FT_COL1 REAL,
FT_COL2 FLOAT4,
FT_COL3 DOUBLE PRECISION,
FT_COL4 FLOAT8,
FT_COL5 FLOAT,
FT_COL6 FLOAT(3),
FT_COL7 DEC(10,4),
FT_COL8 INTEGER(6,3)
) STORE AS orc;
```
插入数据。
```
INSERT INTO float_type_t1 VALUES (10.01, 10.3655, 123456.1234, 10.3214, 123.1237, 123.1237, 123.124, 125.123456);
```
查看数据。
```
SELECT * FROM float_type_t1;
 
 ft_col1 | ft_col2 |   ft_col3   | ft_col4 | ft_col5  | ft_col6 | ft_col7  | ft_col8 
---------+---------+-------------+---------+----------+---------+----------+---------
   10.01 | 10.3655 | 123456.1234 | 10.3214 | 123.1237 | 123.124 | 123.1240 | 125.123
(1 row)
```
