gaussdb200 数据类型

文章 犀牛 ⋅ 于 2021-06-09 22:34:35 ⋅ 430 阅读

数值类型

  • 整数类型

    名称 描述 存储空间 范围
    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类型数据的表。
    CREATE TABLE myschema.int_type_t2 
    (
      a TINYINT, 
      b TINYINT,
      c INTEGER,
      d BIGINT
    );
    
    -- 插入数据。
    INSERT INTO myschema.int_type_t2 VALUES(100, 10, 1000, 10000);
    
    -- 查看数据。
    SELECT * FROM myschema.int_type_t2;
    
    -- 删除表。
    DROP TABLE myschema.int_type_t2;
  • 任意精度类型

    名称 描述 存储空间 范围
    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位。
    -- 创建表。
    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;
  • 序列整型

    名称 描述 存储空间 范围
    SMALLSERIAL 二字节序列整型。 2字节 1 ~ 32,767
    SERIAL 四字节序列整型。 4字节 1 ~ 2,147,483,647
    BIGSERIAL 八字节序列整型。 8字节 1 ~ 9,223,372,036,854,775,807
    -- 创建表。
    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;
  • 浮点类型

    名称 描述 存储空间 范围
    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表示。
    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位。
    -- 创建表。
    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;

货币类型

名字 存储容量 描述 范围
money 8 字节 货币金额 -92233720368547758.08 到 +92233720368547758.07

​ 货币类型存储带有固定小数精度的货币金额,numeric,int和bigint类型的值可以转化为money类型,如果从real和double precision类型转换到money类型,可以先转化为numeric类型,再转化为money类型,例如:

SELECT '12.34'::float8::numeric::money;

如上方式不推荐,转float会存在精度丢失问题

布尔类型

名称 描述 存储空间 取值
BOOLEAN 布尔类型 1字节。 true:真false:假null:未知(unknown)

“真”值的有效文本值:TRUE、't'、'true'、'y'、'yes'、'1'。

“假”值的有效文本值:FALSE、'f'、'false'、'n'、'no'、'0'。

输出时使用't'或者'f'标识真假

-- 创建表。
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;

字符类型

常规字符类型

名称 描述 存储空间
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"只用了一个字节的存储空间,他在系统内部主要用于系统表,主要作为简单化的枚举类型使用。

-- 创建表。
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;

日期时间类型

名称 描述 存储空间
DATE 日期和时间。 4字节(实际存储空间大小为8字节)
TIME [(p)] [WITHOUT TIME ZONE] 只用于一日内时间,p表示小数点后的精度,取值范围为0~6。 8字节
TIME [(p)] [WITH TIME ZONE] 只用于一日内时间,带时区,p表示小数点后的精度,取值范围为0~6。 12字节
TIMESTAMP[(p)] [WITHOUT TIME ZONE] 日期和时间,p表示小数点后的精度,取值范围为0~6。 8字节
TIMESTAMP[(p)][WITH TIME ZONE] 日期和时间,带时区,TIMESTAMP的别名为TIMESTAMPTZ,p表示小数点后的精度,取值范围为0~6。 8字节
SMALLDATETIME 日期和时间,不带时区,精确到分钟,秒位大于等于30秒进一位。 8字节
INTERVAL DAY (l) TO SECOND (p) 时间间隔,X天X小时X分X秒,l:天数的精度,取值范围为0~6,为适配Oracle语法,未实现具体功能,p:秒数的精度,取值范围为0~6,小数末尾的零不显示。 16字节
INTERVAL [FIELDS] [ (p) ] 时间间隔,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格式。 4字节
-- 创建表。
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;

列存支持类型表

类别 数据类型 长度 是否支持
Numeric Types smallint 2 支持
integer 4 支持
bigint 8 支持
decimal 可变长度 支持
numeric 可变长度 支持
real 4 支持
double precision 8 支持
smallserial 2 支持
serial 4 支持
bigserial 8 支持
Monetary Types money 8 支持
Character Types character varying(n), varchar(n) 可变长度 支持
character(n), char(n) n 支持
character、char 1 支持
text 可变长度 支持
nvarchar2 可变长度 支持
name 64 不支持
Date/Time Types timestamp with time zone 8 支持
timestamp without time zone 8 支持
date 4 支持
time without time zone 8 支持
time with time zone 12 支持
interval 16 支持
big object clob 可变长度 支持
blob 可变长度 不支持
other types 不支持
版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海牛部落-犀牛,http://hainiubl.com/topics/75657
本帖已被设为精华帖!
本帖由 青牛 于 3月前 加精
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter