gaussdb200 数据类型

数值类型

  • 整数类型

    名称 描述 存储空间 范围
    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:天数的精度,取值范围为06,为适配Oracle语法,未实现具体功能,p:秒数的精度,取值范围为06,小数末尾的零不显示。 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://www.hainiubl.com/topics/75657

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容