VastbaseG100

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

Menu

数值类型

表12-2列出了所有的可用类型。数字操作符和相关的内置函数请参见12.5.7数字操作函数和操作符。

表12-2 整数类型

名称 描述 存储空间 范围
TINYINT 微整数,别名为INT1。 1字节 0 ~ 255
SMALLINT 小范围整数,别名为INT2。 2字节 -32,768 ~ +32,767
INTEGER 常用的整数,别名为INT4。 4字节 -2,147,483,648 ~ +2,147,483,647
BINARY_INTEGER 常用的整数INTEGER的别名。 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

示例:

--创建具有TINYINT类型数据的表。 
vastbase=# CREATE TABLE int_type_t1 
           ( 
            IT_COL1 TINYINT 
           ); 
 
--向TINYINT表中插入数据。 
vastbase=# INSERT INTO int_type_t1 VALUES(10); 
 
--查看数据。 
vastbase=# SELECT * FROM int_type_t1; 
 it_col1   
---------  
 10 
(1 row) 
 
--删除表。 
vastbase=# DROP TABLE int_type_t1; 

--创建具有TINYINT,INTEGER,BIGINT类型数据的表。 
vastbase=# CREATE TABLE int_type_t2  
( 
    a TINYINT,  
    b TINYINT, 
    c INTEGER, 
    d BIGINT 
); 
 
--插入数据。 
vastbase=# INSERT INTO int_type_t2 VALUES(100, 10, 1000, 10000); 
 
--查看数据。 
vastbase=# SELECT * FROM int_type_t2; 
  a  | b  |  c   |   d    
-----+----+------+------- 
 100 | 10 | 1000 | 10000 
(1 row) 
 
--删除表。 
vastbase=# DROP TABLE int_type_t2;
说明
  • TINYINT、SMALLINT、INTEGER和BIGINT类型存储各种范围的数字,也就是整数。试图存储超出范围以外的数值将会导致错误。

  • 常用的类型是INTEGER,因为它提供了在范围、存储空间、性能之间的最佳平衡。一般只有取值范围确定不超过SMALLINT的情况下,才会使用SMALLINT类型。而只有在INTEGER的范围不够的时候才使用BIGINT,因为前者相对快得多。

表12-3 任意精度型

名称 描述 存储空间 范围
NUMERIC[(p[,s])], DECIMAL[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。
说明:
p为总位数,s为小数位数。
用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。
NUMBER[(p[,s])] NUMERIC类型的别名。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。

示例:

--创建表。 
vastbase=# CREATE TABLE decimal_type_t1  
( 
    DT_COL1 DECIMAL(10,4) 
); 
 
--插入数据。 
vastbase=# INSERT INTO decimal_type_t1 VALUES(123456.122331); 
 
--查询表中的数据。 
vastbase=# SELECT * FROM decimal_type_t1; 
   dt_col1    
------------- 
 123456.1223 
(1 row) 
 
--删除表。 
vastbase=# DROP TABLE decimal_type_t1;
--创建表。 
vastbase=# CREATE TABLE numeric_type_t1  
( 
    NT_COL1 NUMERIC(10,4) 
); 
 
--插入数据。 
vastbase=# INSERT INTO numeric_type_t1 VALUES(123456.12354); 
 
--查询表中的数据。 
vastbase=# SELECT * FROM numeric_type_t1; 
   nt_col1    
------------- 
 123456.1235 
(1 row) 
 
--删除表。 
vastbase=# DROP TABLE numeric_type_t1;
说明
  • 与整数类型相比,任意精度类型需要更大的存储空间,其存储效率、运算效率以及压缩比效果都要差一些。在进行数值类型定义时,优先选择整数类型。当且仅当数值超出整数可表示最大范围时,再选用任意精度类型。

  • 使用Numeric/Decimal进行列定义时,建议指定该列的精度p以及标度s。

表12-4 序列整型

名称 描述 存储空间 范围
SMALLSERIAL 二字节序列整型。 2字节 1 ~ 32,767
SERIAL 四字节序列整型。 4字节 1 ~ 2,147,483,647
BIGSERIAL 八字节序列整型。 8字节 1 ~ 9,223,372,036,854,775,807

示例:

--创建表。 
vastbase=# CREATE TABLE smallserial_type_tab(a SMALLSERIAL); 
 
--插入数据。 
vastbase=# INSERT INTO smallserial_type_tab VALUES(default); 
 
--再次插入数据。 
vastbase=# INSERT INTO smallserial_type_tab VALUES(default); 
 
--查看数据。 
vastbase=# SELECT * FROM smallserial_type_tab;   
 a  
--- 
 1 
 2 
(2 rows) 
 
--创建表。 
vastbase=# CREATE TABLE serial_type_tab(b SERIAL); 
 
--插入数据。 
vastbase=# INSERT INTO serial_type_tab VALUES(default); 
 
--再次插入数据。 
vastbase=# INSERT INTO serial_type_tab VALUES(default); 
 
--查看数据。 
vastbase=# SELECT * FROM serial_type_tab;  
 b  
--- 
 1 
 2 
(2 rows) 
 
--创建表。 
vastbase=# CREATE TABLE bigserial_type_tab(c BIGSERIAL); 
 
--插入数据。 
vastbase=# INSERT INTO bigserial_type_tab VALUES(default); 
 
--插入数据。 
vastbase=# INSERT INTO bigserial_type_tab VALUES(default); 
 
--查看数据。 
vastbase=# SELECT * FROM bigserial_type_tab; 
 c  
--- 
 1 
 2 
(2 rows) 
 
--删除表。 
vastbase=# DROP TABLE smallserial_type_tab; 
 
vastbase=# DROP TABLE serial_type_tab; 
 
vastbase=# DROP TABLE bigserial_type_tab;

说明 SMALLSERIAL,SERIAL和BIGSERIAL类型不是真正的类型,只是为在表中设置唯一标识做的概念上的便利。因此,创建一个整数字段,并且把它的缺省数值安排为从一个序列发生器读取。应用了一个NOT NULL约束以确保NULL不会被插入。在大多数情况下用户可能还希望附加一个UNIQUE或PRIMARY KEY约束避免意外地插入重复的数值,但这个不是自动的。最后,将序列发生器从属于那个字段,这样当该字段或表被删除的时候也一并删除它。目前只支持在创建表时候指定SERIAL列,不可以在已有的表中,增加SERIAL列。另外临时表也不支持创建SERIAL列。因为SERIAL不是真正的类型,也不可以将表中存在的列类型转化为SERIAL。

表12-5 浮点类型

名称 描述 存储空间 范围
REAL, FLOAT4 单精度浮点数,不精准。 4字节 6位十进制数字精度。
DOUBLE PRECISION, FLOAT8, FLOAT 双精度浮点数,不精准。 8字节 1E-307~1E+308, 15位十进制数字精度。
FLOAT[(p)] 浮点数,不精准。精度p取值范围为[1,53]。
说明:
p为精度,表示总位数。
4字节或8字节 根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示。如不指定精度,内部用DOUBLE PRECISION表示。
BINARY_DOUBLE 是DOUBLE PRECISION的别名。 8字节 1E-307~1E+308, 15位十进制数字精度。
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位。

示例:

--创建表。 
vastbase=# CREATE TABLE float_type_t2  
( 
    FT_COL1 INTEGER, 
    FT_COL2 FLOAT4, 
    FT_COL3 FLOAT8, 
FT_COL4 FLOAT,
    FT_COL5 FLOAT(3), 
    FT_COL6 BINARY_DOUBLE, 
    FT_COL7 DECIMAL(10,4), 
    FT_COL8 INTEGER(6,3) 
); 
 
--插入数据。 
vastbase=# INSERT INTO float_type_t2 VALUES(10,10.365456,123456.1234,123456.1234,10.3214, 321.321, 123.123654, 123.123654); 
 
--查看数据。 
vastbase=# SELECT * FROM float_type_t2 ; 
 ft_col1 | ft_col2 |   ft_col3   |   ft_col4    | ft_col5 | ft_col6  | ft_col7  | ft_col8  
---------+---------+-------------+-----------+---------+----------+---------+--------- 
      10 | 10.3655 | 123456.1234 | 123456.1234 | 10.3214 | 321.321  | 123.1237 | 123.124
(1 row) 
 
--删除表。 
vastbase=# DROP TABLE float_type_t2;