整数类型
名称 描述 存储空间 范围
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的别名,为兼容Oracle类型。 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,INTEGER,BIGINT类型数据的表。
任意精度类型
名称 描述 存储空间 范围
NUMERIC[(p[,s])], DECIMAL[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。说明: p为总位数,s为小数位数。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。
NUMBER[(p[,s])] NUMERIC类型的别名,为兼容Oracle数据类型。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。
序列整型
名称 描述 存储空间 范围
SMALLSERIAL 二字节序列整型。 2字节 1 ~ 32,767
SERIAL 四字节序列整型。 4字节 1 ~ 2,147,483,647
BIGSERIAL 八字节序列整型。 8字节 1 ~ 9,223,372,036,854,775,807
浮点类型
名称 描述 存储空间 范围
REAL,FLOAT4 单精度浮点数,不精准。 4字节 6位十进制数字精度。
DOUBLE PRECISION, FLOAT8 双精度浮点数,不精准。 8字节 1E-307~1E+308,15位十进制数字精度。
FLOAT[§] 浮点数,不精准。精度p取值范围为[1,53]。说明: p为精度,表示总位数。 4字节或8字节 根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示。如不指定精度,内部用DOUBLE PRECISION表示。
BINARY_DOUBLE 是DOUBLE PRECISION的别名,为兼容Oracle类型。 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位。
货币类型
名字 描述 存储空间 范围
money 货币金额 -92233720368547758.08 到 +92233720368547758.07
布尔类型
名称 描述 存储空间 取值
BOOLEAN 布尔类型 1字节。 true:真false:假null:未知(unknown)
字符类型
常规字符类型
名称 描述 存储空间
CHAR(n),CHARACTER(n),NCHAR(n) 定长字符串,不足补空格。n是指字节长度,如不带精度n,默认精度为1。 最大为10MB。
VARCHAR(n),CHARACTER VARYING(n) 变长字符串。n是指字节长度。 最大为10MB。
VARCHAR2(n) 变长字符串。是VARCHAR(n)类型的别名,为兼容Oracle类型。n是指字节长度。 最大为10MB。
NVARCHAR2(n) 变长字符串。n是指字符长度。 最大为10MB。
CLOB 文本大对象。是TEXT类型的别名,为兼容Oracle类型。 最大为1G-8023B(即1073733621B)。
TEXT 变长字符串。 最大为1G-8023B(即1073733621B)。
特殊字符类型
名称 描述 存储空间
name 用于对象名的内部类型。 64字节。
“char” 单字节内部类型。 1字节。
name类型只用在内部系统表中,作为存储标识符,不建议普通用户使用,该类型长度当前定为64字节(63可用字符加结束符)
类型"char"只用了一个字节的存储空间,他在系统内部主要用于系统表,主要作为简单化的枚举类型使用。
日期时间类型
名称 描述 存储空间
DATE 日期和时间。 4字节(实际存储空间大小为8字节)
TIME [§] [WITHOUT TIME ZONE] 只用于一日内时间,p表示小数点后的精度,取值范围为0~6。 8字节
TIME [§] [WITH TIME ZONE] 只用于一日内时间,带时区,p表示小数点后的精度,取值范围为0~6。 12字节
TIMESTAMP[§] [WITHOUT TIME ZONE] 日期和时间,p表示小数点后的精度,取值范围为0~6。 8字节
TIMESTAMP[§][WITH TIME ZONE] 日期和时间,带时区,TIMESTAMP的别名为TIMESTAMPTZ,p表示小数点后的精度,取值范围为0~6。 8字节
SMALLDATETIME 日期和时间,不带时区,精确到分钟,秒位大于等于30秒进一位。 8字节
INTERVAL DAY (l) TO SECOND § 时间间隔,X天X小时X分X秒,l:天数的精度,取值范围为06,为适配Oracle语法,未实现具体功能,p:秒数的精度,取值范围为06,小数末尾的零不显示。 16字节
INTERVAL [FIELDS] [ § ] 时间间隔,fields:可以是YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,DAY TO HOUR,DAY TO MINUTE,DAY TO SECOND,HOUR TO MINUTE,HOUR TO SECOND,MINUTE TO SECOND,p:秒数的精度,取值范围为0~6,且fields为SECOND,DAY TO SECOND,HOUR TO SECOND或MINUTE TO SECOND时,参数p才有效,小数末尾的零不显示。 12字节
reltime 相对时间间隔,格式为:X years X mons X days XX:XX:XX,采用儒略历计时,规定一年为365.25天,一个月为30天,计算输入值对应的相对时间间隔,输出采用POSTGRES格式。
-- 创建具有TINYINT,INTEGER,BIGINT类型数据的表。
CREATE TABLE myschema.int_type_t2
(
a TINYINT,
b TINYINT,
c INTEGER,
d BIGINT
);
-- 创建表。
CREATE TABLE myschema.numeric_type_t1
(
NT_COL1 NUMERIC(10,4)
);
-- 插入数据。
INSERT INTO myschema.numeric_type_t1 VALUES(123456.12354);
-- 查询表中的数据。
SELECT * FROM myschema.numeric_type_t1;
nt_col1
-------------
123456.1235
(1 row)
-- 因为小数位精度限制了4位,所以只结果为123456.1235
-- 删除表。
DROP TABLE myschema.numeric_type_t1;
-- 创建表。
CREATE TABLE myschema.smallserial_type_tab(a SMALLSERIAL);
-- 插入数据。
INSERT INTO myschema.smallserial_type_tab VALUES(default);
-- 再次插入数据。
INSERT INTO myschema.smallserial_type_tab VALUES(default);
-- 查看数据。
SELECT * FROM myschema.smallserial_type_tab;
a
---
1
2
(2 rows)
-- 创建表。
CREATE TABLE myschema.serial_type_tab(b SERIAL);
-- 插入数据。
INSERT INTO myschema.serial_type_tab VALUES(default);
-- 再次插入数据。
INSERT INTO myschema.serial_type_tab VALUES(default);
-- 查看数据。
SELECT * FROM myschema.serial_type_tab;
b
---
1
2
(2 rows)
-- 创建表。
CREATE TABLE myschema.bigserial_type_tab(c BIGSERIAL);
-- 插入数据。
INSERT INTO myschema.bigserial_type_tab VALUES(default);
-- 插入数据。
INSERT INTO myschema.bigserial_type_tab VALUES(default);
-- 查看数据。
SELECT * FROM myschema.bigserial_type_tab;
c
---
1
2
(2 rows)
-- 删除表。
DROP TABLE myschema.smallserial_type_tab;
DROP TABLE myschema.serial_type_tab;
DROP TABLE myschema.bigserial_type_tab;
-- 创建表。
CREATE TABLE myschema.float_type_t2
(
FT_COL1 INTEGER,
FT_COL2 FLOAT4,
FT_COL3 FLOAT8,
FT_COL4 FLOAT(16),
FT_COL5 BINARY_DOUBLE,
FT_COL6 DECIMAL(10,4),
FT_COL7 INTEGER(6,3)
) DISTRIBUTE BY HASH ( ft_col1);
-- 插入数据。
INSERT INTO myschema.float_type_t2 VALUES(10,10.365456,123456.1234,10.3214, 321.321, 123.123654, 123.123654);
INSERT INTO myschema.float_type_t2 VALUES(10,10.365456,123456.1234,10.12654, 321.321, 123.123654, 123.123654);
-- 查看数据。
SELECT * FROM myschema.float_type_t2 ;
ft_col1 | ft_col2 | ft_col3 | ft_col4 | ft_col5 | ft_col6 | ft_col7
---------+---------+-------------+---------+---------+----------+---------
10 | 10.3655 | 123456.1234 | 10.3214 | 321.321 | 123.1237 | 123.124
(1 row)
-- 删除表。
DROP TABLE myschema.float_type_t2;
-- 创建表。
CREATE TABLE myschema.bool_type_t1
(
BT_COL1 BOOLEAN,
BT_COL2 TEXT
) DISTRIBUTE BY HASH(BT_COL2);
-- 插入数据。
INSERT INTO myschema.bool_type_t1 VALUES (TRUE, 'sic est');
INSERT INTO myschema.bool_type_t1 VALUES (FALSE, 'non est');
-- 查看数据。
SELECT * FROM myschema.bool_type_t1;
bt_col1 | bt_col2
---------+---------
t | sic est
f | non est
(2 rows)
SELECT * FROM myschema.bool_type_t1 WHERE bt_col1 = 't';
bt_col1 | bt_col2
---------+---------
t | sic est
(1 row)
-- 删除表。
DROP TABLE myschema.bool_type_t1;
-- 创建表。
CREATE TABLE myschema.char_type_t2
(
CT_COL1 VARCHAR(5)
) DISTRIBUTE BY HASH (CT_COL1);
-- 插入数据。
INSERT INTO myschema.char_type_t2 VALUES ('ok');
INSERT INTO myschema.char_type_t2 VALUES ('good');
-- 插入的数据长度超过类型规定的长度报错。
INSERT INTO myschema.char_type_t2 VALUES ('too long');
-- ERROR: value too long for type character varying(4)
-- CONTEXT: referenced column: ct_col1
-- 明确类型的长度,超过数据类型长度后会自动截断。
INSERT INTO myschema.char_type_t2 VALUES ('too long'::varchar(5));
-- 查询数据。
SELECT ct_col1, char_length(ct_col1) FROM myschema.char_type_t2;
ct_col1 | char_length
---------+-------------
ok | 2
good | 5
too l | 5
(3 rows)
-- too long已经被截断为5位(too l)
-- 删除数据。
DROP TABLE myschema.char_type_t2;
-- 创建表。
CREATE TABLE myschema.date_type_tab(coll date);
-- 插入数据。
INSERT INTO myschema.date_type_tab VALUES (date '01-01-2021');
INSERT INTO myschema.date_type_tab VALUES (date '2021-01-01');
-- 查看数据。
SELECT * FROM myschema.date_type_tab;
coll
---------------------
2021-01-01 00:00:00
2021-01-01 00:00:00
(2 rows)
-- 删除表。
DROP TABLE myschema.date_type_tab;
-- 创建表。
CREATE TABLE myschema.time_type_tab (da time without time zone ,dai time with time zone,dfgh timestamp without time zone,dfga timestamp with time zone, vbg smalldatetime);
/*
Column | Type | Modifiers | Storage | Stats target | Description
--------+-----------------------------+-----------+---------+--------------+-------------
da | time without time zone | | plain | |
dai | time with time zone | | plain | |
dfgh | timestamp without time zone | | plain | |
dfga | timestamp with time zone | | plain | |
vbg | smalldatetime | | plain | |
Has OIDs: no
Distribute By: HASH(da)
Location Nodes: ALL DATANODES
Options: orientation=row, compression=no
*/
-- 插入数据。
INSERT INTO myschema.time_type_tab VALUES ('21:21:21','21:21:21 gmt','2010-12-12','2013-12-11 gmt','2003-04-12 04:05:06');
-- 查看数据。
SELECT * FROM myschema.time_type_tab;
/*
da | dai | dfgh | dfga | vbg
----------+-------------+---------------------+------------------------+---------------------
21:21:21 | 21:21:21-08 | 2010-12-12 00:00:00 | 2013-12-11 16:00:00+08 | 2003-04-12 04:05:00
(1 row)
*/
-- 删除表。
DROP TABLE myschema.time_type_tab;
-- 创建表。
-- select interval '5' day + interval '10' second;结果就为5天10秒,在Oracle中较为常用。
-- 如下创建了一个interval day to second类型 天的位数为3 秒的位数为4
CREATE TABLE myschema.day_type_tab (a int,b INTERVAL DAY(3) TO SECOND (4));
-- 插入数据。
INSERT INTO myschema.day_type_tab VALUES (1, INTERVAL '3' DAY);
-- 插入333天2小时10分10秒
INSERT INTO myschema.day_type_tab VALUES (2, INTERVAL '333 2:10:10' DAY to second);
-- 查看数据。
SELECT * FROM myschema.day_type_tab;
/*
a | b
---+-------------------
1 | 3 days
2 | 333 days 02:10:10
(2 rows)
*/
-- 删除表。
DROP TABLE myschema.day_type_tab;
-- 创建表。
CREATE TABLE myschema.year_type_tab(a int, b interval year (6));
-- 插入数据。
INSERT INTO myschema.year_type_tab VALUES(1,interval '2' year);
-- 查看数据。
SELECT * FROM myschema.year_type_tab;
a | b
---+---------
1 | 2 years
(1 row)
-- 删除表。
DROP TABLE myschema.year_type_tab;
GAUSSDB_200
最新推荐文章于 2024-01-26 15:31:48 发布