华为云用户手册

  • 伪类型 GaussDB (DWS)数据类型中包含一系列特殊用途的类型,这些类型按照类别被称为伪类型。伪类型不能作为字段的数据类型,但是可以用于声明函数的参数或者结果类型。 当一个函数不仅是简单地接受并返回某种SQL数据类型,伪类型能起到很大的作用。表1列出了所有的伪类型。 表1 伪类型 名字 描述 any 表示函数接受任何输入数据类型。 anyelement 表示函数接受任何数据类型。 anyarray 表示函数接受任意数组数据类型。 anynonarray 表示函数接受任意非数组数据类型。 anyenum 表示函数接受任意枚举数据类型。 anyrange 表示函数接受任意范围数据类型。 cstring 表示函数接受或者返回一个空结尾的C字符串。 internal 表示函数接受或者返回一种服务器内部的数据类型。 language_handler 声明一个过程语言调用句柄返回language_handler。 fdw_handler 声明一个外部数据封装器返回fdw_handler。 record 标识函数返回一个未声明的行类型。 trigger 声明一个触发器函数返回trigger。 void 表示函数不返回数值。 opaque 一个已经过时的类型,以前用于所有上面这些用途。 声明用C编写的函数(不管是内置的还是动态装载的)都可以接受或者返回任何这样的伪数据类型。当伪类型作为参数类型使用时,用户需要保证函数的正常运行。 用过程语言编写的函数只能使用实现语言允许的伪类型。目前,过程语言不允许使用伪类型作为参数类型,只允许使用void和record作为结果类型。一些多态的函数还支持使用anyelement,anyarray,anynonarray anyenum和anyrange类型。 伪类型internal用于声明只能在数据库系统内部调用的函数,这些函数不能直接在SQL查询里调用。如果某函数至少有一个internal类型的参数,则不能从SQL里调用。建议不要创建任何声明返回internal的函数,除非该函数至少有一个internal类型的参数。 示例: 创建或替换函数showall()。 123 CREATE OR REPLACE FUNCTION showall() RETURNS SETOF recordAS $$ SELECT count(*) from tpcds.store_sales where ss_customer_sk = 9692; $$LANGUAGE SQL; 调用函数showall()。 12345 SELECT showall(); showall --------- (35)(1 row) 删除函数。 1 DROP FUNCTION showall(); 父主题: 数据类型
  • cidr cidr(无类别域间路由,Classless Inter-Domain Routing)类型,保存一个IPv4或IPv6网络地址。声明网络格式为address/y,address表示IPv4或者IPv6地址,y表示子网掩码的二进制位数。如果省略y,则掩码部分使用已有类别的网络编号系统进行计算,但要求输入的数据已经包括了确定掩码所需的所有字节。 示例一:CIDR格式换算为IP地址网段 例如,10.0.0.0/8换算为32位二进制地址:00001010.00000000.00000000.00000000。其中/8表示8位网络ID,即32位二进制地址中前8位是固定不变的,对应网段为:00001010.00000000.00000000.00000000~00001010.11111111.11111111.11111111。则换算为十进制后,10.0.0.0/8表示:子网掩码为255.0.0.0,对应网段为10.0.0.0~10.255.255.255。 示例二:IP地址网段换算为CIDR格式 例如,192.168.0.0~192.168.31.255,后两段IP换算为二进制地址:00000000.00000000~00011111.11111111,可以得出前19位(8*2+3)是固定不变的,则换算为CIDR格式后,表示为:192.168.0.0/19。 表2 cidr类型输入举例 cidr输入 cidr输出 abbrev(cidr) 192.168.100.128/25 192.168.100.128/25 192.168.100.128/25 192.168/24 192.168.0.0/24 192.168.0/24 192.168/25 192.168.0.0/25 192.168.0.0/25 192.168.1 192.168.1.0/24 192.168.1/24 192.168 192.168.0.0/24 192.168.0/24 10.1.2 10.1.2.0/24 10.1.2/24 10.1 10.1.0.0/16 10.1/16 10 10.0.0.0/8 10/8 10.1.2.3/32 10.1.2.3/32 10.1.2.3/32 2001:4f8:3:ba::/64 2001:4f8:3:ba::/64 2001:4f8:3:ba::/64 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 2001:4f8:3:ba:2e0:81ff:fe22:d1f1
  • 序列整型 SMALLSERIAL,SERIAL和BIGSERIAL类型不是真正的类型,只是为在表中设置唯一标识而存在的概念。因此,创建一个整数字段,并且把它的缺省数值安排为从一个序列发生器读取。应用了一个NOT NULL约束以确保NULL不会被插入。在大多数情况下用户可能还希望附加一个UNIQUE或PRIMARY KEY约束避免意外地插入重复的数值。最后,将序列发生器从属于那个字段,这样当该字段或表被删除的时候也一并删除该序列。目前只支持在创建表时指定SERIAL列,不可以在已有的表中增加SERIAL列。另外临时表也不支持创建SERIAL列。因为SERIAL不是真正的类型,也不可以将表中存在的列类型转化为SERIAL。 表4 序列整型 名称 描述 存储空间 范围 SMALLSERIAL 二字节序列整型。 2字节 1 ~ 32,767 SERIAL 四字节序列整型。 4字节 1 ~ 2,147,483,647 BIGSERIAL 八字节序列整型。 8字节 1 ~ 9,223,372,036,854,775,807 示例: 创建带有序列类型的表。 1 CREATE TABLE smallserial_type_tab(a SMALLSERIAL); 插入数据。 1 INSERT INTO smallserial_type_tab VALUES(default); 再次插入数据。 1 INSERT INTO smallserial_type_tab VALUES(default); 查看数据。 123456 SELECT * FROM smallserial_type_tab; a --- 1 2(2 rows) 插入NULL值会报错。 12 INSERT INTO smallserial_type_tab VALUES(NULL);ERROR: dn_6001_6002: null value in column "a" violates not-null constraint
  • 任意精度型 NUMBER类型能够用于存储对于精度位数没有限制的数字,并且可以用于执行精确计算。当要求高精确度时,推荐使用这种类型来存储货币总量和其他类型的数量值。与整数类型相比,任意精度类型需要更大的存储空间,其存储效率、运算效率以及压缩比效果都要差一些。 NUMBER类型数值的范围是小数点右边部分的小数位数。NUMBER类型数值的精度是指整个数值包含的所有数字,也就是小数点左右两边的所有数字。所以,可以说数值23.1234的精度为6,范围是4。可以认为整数的范围是0。 使用Numeric/Decimal进行列定义时,建议指定该列的精度p(总位数)以及范围s(小数位数)。 如果数值的精度或者范围大于列的数据类型所声明的精度和范围,那么系统将会试图对这个值进行四舍五入。如果不能对数值进行四舍五入的处理来满足数据类型的限制,则会报错。 表2 任意精度型 名称 描述 存储空间 范围 NUMERIC[(p[,s])], DECIMAL[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 NUMBER[(p[,s])] NUMERIC类型的别名,为兼容Oracle数据类型。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 示例: 创建带有DECIMAL数值类型的表。 1 CREATE TABLE decimal_type_t1 (DT_COL1 DECIMAL(10,4)); 插入数据。 12 INSERT INTO decimal_type_t1 VALUES(123456.122331);INSERT INTO decimal_type_t1 VALUES(123456.452399); 查看数据。 123456 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表示。 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位。 示例: 创建带有浮点类型的表。 1 2 3 4 5 6 7 8 910 CREATE TABLE float_type_t2 ( FT_COL1 INTEGER, FT_COL2 FLOAT4, FT_COL3 FLOAT8, FT_COL4 FLOAT(3), FT_COL5 BINARY_DOUBLE, FT_COL6 DECIMAL(10,4), FT_COL7 INTEGER(6,3)) DISTRIBUTE BY HASH ( ft_col1); 插入数据。 1 INSERT INTO float_type_t2 VALUES(10,10.365456,123456.1234,10.3214, 321.321, 123.123654, 123.123654); 查看数据。 12345 SELECT * FROM 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)
  • 整数类型 TINYINT、SMALLINT、INTEGER、BINARY_INTEGER和BIGINT类型存储整个数值(不带有小数部分),也就是整数。如果尝试存储超出范围以外的数值将会导致错误。 常用的类型是INTEGER,一般只有取值范围确定不超过SMALLINT的情况下,才会使用SMALLINT类型。而只有在INTEGER的范围不够的时候才使用BIGINT,因为前者相对快得多。 表1 整数类型 名称 描述 存储空间 范围 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类型数据的表。 1234567 CREATE TABLE int_type_t1 ( a TINYINT, b TINYINT, c INTEGER, d BIGINT); 插入数据。 1 INSERT INTO int_type_t1 VALUES(100, 10, 1000, 10000); 查看数据。 12345 SELECT * FROM int_type_t1; a | b | c | d -----+----+------+------- 100 | 10 | 1000 | 10000(1 row)
  • 空串与NULL Oracle兼容模式下,不区分空串与NULL,执行语句查询或数据导入时会将空串处理为NULL。 由于空串默认被处理为NULL,那就不能使用 = '' 作为查询条件,也不能用is ''。虽然不会有语法错误,但是不会有结果集返回。正确的用法是is null,不等于就是is not null 。 示例: 创建表t4,指定其字段的字符类型。 1 CREATE TABLE t4 (a text); 向表t4插入数据,插入值中包含空串和NULL。 12 INSERT INTO t4 VALUES('abc'),(''),(null);INSERT 0 3 查询表t4中是否存在空值。 1 2 3 4 5 6 7 8 91011121314 SELECT a,a isnull FROM t4; a | ?column?-----+---------- | t | t abc | f(3 rows)SELECT a,a isnull FROM t4 WHERE a is null; a | ?column?---+---------- | t | t(2 rows) TD与MySQL兼容模式下,区分空串与null。 TD兼容模式下示例: 12345 SELECT '' is null , null is null; isnull | isnull--------+---------- f | t(1 rows) MySQL兼容模式下示例: 12345 SELECT '' is null , null is null; isnull | isnull--------+---------- f | t(1 rows)
  • 定长与变长 所有字符类型根据长度是否固定可以分为定长字符串与变长字符串两大类。 对于定长字符串,长度必须确定,如果不指定长度,则默认长度1;如果数据长度不足,会在尾部自动填充空格,用于存储和显示;但这部分填充的数据是无意义的,实际使用中会被忽略,如比较、排序或类型转换。 对于变长字符串,若指定长度,则为最大可存储数据长度;如果不指定长度,则认为该字段支持任意长度。 示例: 创建表t2,指定其字段的字符类型。 1 CREATE TABLE t2 (a char(5),b varchar(5)); 向表t2插入数据并查询字段a的字节长度。因建表时指定a的字符类型为char(5)且是定长字符串,长度不足,填充空格,所以查询的字节长度为5。 12345678 INSERT INTO t2 VALUES('abc','abc');INSERT 0 1SELECT a,lengthb(a),b FROM t2; a | lengthb | b-------+---------+----- abc | 5 | abc(1 row) 用函数转换后查询字段a的实际字节长度为3。 1 2 3 4 5 6 7 8 91011 SELECT a = b from t2; ?column?---------- t(1 row)SELECT cast(a as text) as val,lengthb(val) FROM t2; val | lengthb-----+--------- abc | 3(1 row)
  • 长度 如果把一个字段定义为char(n)或者varchar(n), 代表该字段最大可容纳n个长度的数据。无论哪种类型,可设置的最大长度都不得超过10485760(即10MB)。 当数据长度超过指定的长度n时,会抛出错误"value too long"。也可通过指定数据类型,使超过长度的数据自动截断。 示例: 创建表t1,指定其字段的字符类型。 1 CREATE TABLE t1 (a char(5),b varchar(5)); 向表t1插入数据时超过指定的字节长度报错。 123 INSERT INTO t1 VALUES('bookstore','123');ERROR: value too long for type character(5)CONTEXT: referenced column: a 向表t1插入数据并明确超过指定字节长度后自动截断。 12345678 INSERT INTO t1 VALUES('bookstore'::char(5),'12345678'::varchar(5));INSERT 0 1SELECT a,b FROM t1; a | b-------+------- books | 12345(1 row)
  • 设置XML参数 语法格式如下: 12 SET XML OPTION { DOCUMENT | CONTENT };SET xmloption TO { DOCUMENT | CONTENT }; 当一个字符串值在没有通过XMLPARSE或XMLSERIALIZE函数与XML类型进行转换时,由XML OPTION会话配置参数来决定选择DOCUMENT还是CONTENT。 默认为CONTENT,表示所有形式的xml数据都被允许。 示例: 1234 SET XML OPTION DOCUMENT;SETSET xmloption TO DOCUMENT;SET
  • 示例 创建表: 1234567 CREATE TABLE blob_type_t1 ( BT_COL1 INTEGER, BT_COL2 BLOB, BT_COL3 RAW, BT_COL4 BYTEA) DISTRIBUTE BY REPLICATION; 插入数据: 1 INSERT INTO blob_type_t1 VALUES(10,empty_blob(),HEXTORAW('DEADBEEF'),E'\\xDEADBEEF'); 查询表中的数据: 12345 SELECT * FROM blob_type_t1; bt_col1 | bt_col2 | bt_col3 | bt_col4 ---------+---------+----------+------------ 10 | | DEADBEEF | \xdeadbeef(1 row) 删除表: 1 DROP TABLE blob_type_t1;
  • 多边形 多边形由一系列点代表(多边形的顶点)。多边形可以认为与闭合路径一样,但是存储方式不一样而且有自己的一套支持函数。 用下面的语法描述polygon的数值: ( ( x1 , y1 ) , ... , ( xn , yn ) )( x1 , y1 ) , ... , ( xn , yn )( x1 , y1 , ... , xn , yn )x1 , y1 , ... , xn , yn 点表示多边形的端点。 多边形输出使用第一种语法。
  • 路径 路径由一系列连接的点组成。路径可能是开放的,也就是认为列表中第一个点和最后一个点没有连接,也可能是闭合的,这时认为第一个和最后一个点连接起来。 用下面的语法描述path的数值: [ ( x1 , y1 ) , ... , ( xn , yn ) ]( ( x1 , y1 ) , ... , ( xn , yn ) )( x1 , y1 ) , ... , ( xn , yn )( x1 , y1 , ... , xn , yn )x1 , y1 , ... , xn , yn 点表示组成路径的线段的端点。方括弧([])表明一个开放的路径,圆括弧(())表明一个闭合的路径。当最外层的括号被省略,如在第三至第五语法,会假定一个封闭的路径。 路径的输出使用第一种或第二种语法输出。
  • jsonb高级特性 json和jsonb的主要差异在于存储方式上的不同,jsonb存储的是解析后的二进制,能够体现JSON的层次结构,更便于直接访问等,因此jsonb较json具有很多高级特性。 格式归一化 对于输入的object-json字符串,解析成jsonb二进制后,会天然的丢弃语义上无关紧要的细节,比如空格: 12345 SELECT ' [1, " a ", {"a" :1 }] '::jsonb; jsonb----------------------[1, " a ", {"a": 1}](1 row) 对于object-json,会删除重复的键值,只保留最后一个出现的,例如: 12345 SELECT '{"a" : 1, "a" : 2}'::jsonb;jsonb----------{"a": 2}(1 row) 对于object-json,键值会重新进行排序,排序规则:长度长的在后、长度相等则ascii码大的在后,例如: 12345 SELECT '{"aa" : 1, "b" : 2, "a" : 3}'::jsonb; jsonb---------------------------{"a": 3, "b": 2, "aa": 1}(1 row)
  • 输入格式 json和jsonb输入必须是一个符合JSON数据格式的字符串,此字符串用单引号''声明。 null (null-json):仅null,全小写。 12 SELECT 'null'::json; -- sucSELECT 'NULL'::jsonb; -- err 数字 (num-json):正负整数、小数、0,支持科学计数法。 1234 SELECT '1'::json;SELECT '-1.5'::json;SELECT '-1.5e-5'::jsonb, '-1.5e+2'::jsonb;SELECT '001'::json, '+15'::json, 'NaN'::json; -- 不支持多余的前导0,正数的+号,以及NaN和infinity。 布尔(bool-json):仅true、false,全小写。 12 SELECT 'true'::json;SELECT 'false'::jsonb; 字符串(str-json):必须是加双引号的字符串。 12 SELECT '"a"'::json;SELECT '"abc"'::jsonb; 数组(array-json):使用中括号[]包裹,满足数组书写条件。数组内元素类型可以是任意合法的JSON,且不要求类型一致。 123 SELECT '[1, 2, "foo", null]'::json;SELECT '[]'::json;SELECT '[1, 2, "foo", null, [[]], {}]'::jsonb; 对象(object-json):使用大括号{}包裹,键必须是满足JSON字符串规则的字符串,值可以是任意合法的JSON。 123 SELECT '{}'::json;SELECT '{"a": 1, "b": {"a": 2, "b": null}}'::json;SELECT '{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}'::jsonb;
  • 时间段输入 reltime的输入方式可以采用任何合法的时间段文本格式,包括数字形式(含负数和小数)及时间形式,其中时间形式的输入支持SQL标准格式、ISO-8601格式、POSTGRES格式等。另外,文本输入需要加单引号。 时间段输入的详细信息请参考表6 时间段输入。 表6 时间段输入 输入示例 输出结果 描述 60 2 mons 采用数字表示时间段,默认单位是day,可以是小数或负数。特别的,负数时间段,在语义上,可以理解为“早于多久”。 31.25 1 mons 1 days 06:00:00 -365 -12 mons -5 days 1 years 1 mons 8 days 12:00:00 1 years 1 mons 8 days 12:00:00 采用POSTGRES格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 -13 months -10 hours -1 years -25 days -04:00:00 -2 YEARS +5 MONTHS 10 DAYS -1 years -6 mons -25 days -06:00:00 P-1.1Y10M -3 mons -5 days -06:00:00 采用ISO-8601格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 -12H -12:00:00 示例: 1 2 3 4 5 6 7 8 910111213141516171819202122232425 --创建表。CREATE TABLE reltime_type_tab(col1 character(30), col2 reltime);--插入数据。INSERT INTO reltime_type_tab VALUES ('90', '90');INSERT INTO reltime_type_tab VALUES ('-366', '-366');INSERT INTO reltime_type_tab VALUES ('1975.25', '1975.25');INSERT INTO reltime_type_tab VALUES ('-2 YEARS +5 MONTHS 10 DAYS', '-2 YEARS +5 MONTHS 10 DAYS');INSERT INTO reltime_type_tab VALUES ('30 DAYS 12:00:00', '30 DAYS 12:00:00');INSERT INTO reltime_type_tab VALUES ('P-1.1Y10M', 'P-1.1Y10M');--查看数据。SELECT * FROM reltime_type_tab; col1 | col2 --------------------------------+------------------------------------- 1975.25 | 5 years 4 mons 29 days -2 YEARS +5 MONTHS 10 DAYS | -1 years -6 mons -25 days -06:00:00 P-1.1Y10M | -3 mons -5 days -06:00:00 -366 | -1 years -18:00:00 90 | 3 mons 30 DAYS 12:00:00 | 1 mon 12:00:00(6 rows)--删除表。DROP TABLE reltime_type_tab;
  • 特殊值 GaussDB(DWS)支持几个特殊值,在读取的时候将被转换成普通的日期/时间值,请参考表5。 表5 特殊值 输入字符串 适用类型 描述 epoch date,timestamp 1970-01-01 00:00:00+00 (Unix系统零时) infinity timestamp 比任何其他时间戳都晚 -infinity timestamp 比任何其他时间戳都早 now date,time,timestamp 当前事务的开始时间 today date,timestamp 今日午夜 tomorrow date,timestamp 明日午夜 yesterday date,timestamp 昨日午夜 allballs time 00:00:00.00 UTC
  • 日期输入 日期和时间的输入几乎可以是任何合理的格式,包括ISO-8601格式、SQL-兼容格式、传统POSTGRES格式或者其它的形式。系统支持按照日、月、年的顺序自定义日期输入。如果把DateStyle参数设置为MDY就按照“月-日-年”解析,设置为DMY就按照“日-月-年”解析,设置为YMD就按照“年-月-日”解析。 日期的文本输入需要加单引号包围,语法如下: type [ ( p ) ] 'value' 可选的精度声明中的p是一个整数,表示在秒域中小数部分的位数。表2显示了date类型的输入方式。 表2 日期输入方式 例子 描述 1999-01-08 ISO 8601格式(建议格式),任何方式下都是1999年1月8号。 January 8, 1999 在任何datestyle输入模式下都无歧义。 1/8/1999 有歧义,在MDY模式下是一月八号,在DMY模式下是八月一号。 1/18/1999 MDY模式下是一月十八日,其它模式下被拒绝。 01/02/03 MDY模式下的2003年1月2日。 DMY模式下的2003年2月1日。 YMD模式下的2001年2月3日。 1999-Jan-08 任何模式下都是1月8日。 Jan-08-1999 任何模式下都是1月8日。 08-Jan-1999 任何模式下都是1月8日。 99-Jan-08 YMD模式下是1月8日,否则错误。 08-Jan-99 一月八日,除了在YMD模式下是错误的之外。 Jan-08-99 一月八日,除了在YMD模式下是错误的之外。 19990108 ISO 8601;任何模式下都是1999年1月8日。 990108 ISO 8601;任何模式下都是1999年1月8日。 1999.008 年和年里的第几天。 J2451187 儒略日。 January 8, 99 BC 公元前99年。 示例: 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637 --创建表。CREATE TABLE date_type_tab(coll date);--插入数据。INSERT INTO date_type_tab VALUES (date '12-10-2010');--查看数据。SELECT * FROM date_type_tab; coll --------------------- 2010-12-10 00:00:00(1 row)--查看日期格式。SHOW datestyle; DateStyle ----------- ISO, MDY(1 row)--设置日期格式。SET datestyle='YMD';SET--插入数据。INSERT INTO date_type_tab VALUES(date '2010-12-11');--查看数据。SELECT * FROM date_type_tab; coll --------------------- 2010-12-10 00:00:00 2010-12-11 00:00:00(2 rows)--删除表。DROP TABLE date_type_tab;
  • 货币类型 货币类型存储带有固定小数精度的货币金额。表1中显示的范围假设有两位小数。可以以任意格式输入,包括整型、浮点型或者典型的货币格式(如“$1,000.00”)。根据区域字符集,输出一般是最后一种形式。 表1 货币类型 名字 存储容量 描述 范围 money 8 字节 货币金额 -92233720368547758.08 到 +92233720368547758.07 numeric、int和bigint类型的值可以转化为money类型。如果从real和double precision类型转换到money类型,可以先转化为numeric类型,再转化为money类型,例如: 1 SELECT '12.34'::float8::numeric::money; 这种用法是不推荐使用的。浮点数不应该用来处理货币类型,因为小数点的位数可能会导致错误。 money类型的值可以转换为numeric类型而不丢失精度。转换为其他类型可能丢失精度,并且必须通过以下两步来完成: 1 SELECT '52093.89'::money::numeric::float8; 当一个money类型的值除以另一个money类型的值时,结果是double precision(也就是,一个纯数字,而不是money类型);在运算过程中货币单位相互抵消。 父主题: 数据类型
  • 位串类型 位串就是一串1和0的字符串。它们可以用于存储位掩码。 GaussDB(DWS)支持两种位串类型:bit(n)和bit varying(n),其中n是一个正整数。 bit类型的数据必须准确匹配长度n,如果存储短或者长的数据都会报错。bit varying类型的数据是最长为n的变长类型,超过n的类型会被拒绝。一个没有长度的bit等效于bit(1),没有长度的bit varying表示没有长度限制。 如果显式地把一个位串值转换成bit(n),则此位串右边的内容将被截断或者在右边补齐零,直到刚好n位,而且不会抛出任何错误。类似地,如果显式地把一个位串数值转换成bit varying(n),如果它超过了n位,则它的右边将被截断。 位串类型使用示例: 创建示例表bit_type_t1: 123456 CREATE TABLE bit_type_t1 ( BT_COL1 INTEGER, BT_COL2 BIT(3), BT_COL3 BIT VARYING(5)) DISTRIBUTE BY REPLICATION; 插入数据: 1 INSERT INTO bit_type_t1 VALUES(1, B'101', B'00'); 插入数据的长度不符合类型的标准会报错。 123 INSERT INTO bit_type_t1 VALUES(2, B'10', B'101');ERROR: bit string length 2 does not match type bit(3)CONTEXT: referenced column: bt_col2 将不符合类型长度的数据进行转换: 1 INSERT INTO bit_type_t1 VALUES(2, B'10'::bit(3), B'101'); 查看数据: 123456 SELECT * FROM bit_type_t1; bt_col1 | bt_col2 | bt_col3 ---------+---------+--------- 1 | 101 | 00 2 | 100 | 101(2 rows) 父主题: 数据类型
  • regexp_split_to_table(string text, pattern text [, flags text]) 描述:用POSIX正则表达式作为分隔符,分隔string。如果没有与pattern的匹配,该函数返回string。如果有至少有一个匹配,对每一个匹配它都返回从上一个匹配的末尾(或者串的开头)到这次匹配开头之间的文本。当没有更多匹配时,它返回从上一次匹配的末尾到串末尾之间的文本。 flags参数包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。 返回值类型:setof text 示例: 123456 SELECT regexp_split_to_table('hello world', E'\\s+'); regexp_split_to_table----------------------- hello world(2 rows) 如果没有子查询,当regexp_split_to_table函数没有匹配上时,不会输出表中的数据。这通常不是所需的返回结果,应避免这种写法。 1 2 3 4 5 6 7 8 9101112131415 SELECT * FROM tab; c1 | c2 -----+----- dws |(1 row)SELECT c1, regexp_split_to_table(c2, E'\\s+') FROM tab; c1 | regexp_split_to_table ----+-----------------------(0 rows)SELECT c1, (select regexp_split_to_table(c2, E'\\s+')) FROM tab; c1 | regexp_split_to_table -----+----------------------- dws |
  • regexp_substr(source_char, pattern) 描述:正则表达式的抽取子串函数。 返回值类型:varchar 示例: 12345 SELECT regexp_substr('500 Hello World, Redwood Shores, CA', ',[^,]+,') "REGEXPR_SUBSTR"; REGEXPR_SUBSTR ------------------- , Redwood Shores,(1 row)
  • split_part(string text, delimiter text, field int) 描述:根据delimiter分隔string返回生成的第field个子字符串(从出现第一个delimiter的text为基础)。 返回值类型:text 示例: 12345 SELECT split_part('abc~@~def~@~ghi', '~@~', 2); split_part------------ def(1 row)
  • substr(string,from) 描述: 从参数string中抽取子字符串。 from表示抽取的起始位置。 from为0时,按1处理。 from为正数时,抽取从from到末尾的所有字符。 from为负数时,抽取字符串的后n个字符,n为from的绝对值。 返回值类型:varchar 示例: from为正数时: 12345 SELECT substr('ABCDEF',2); substr-------- BCDEF(1 row) from为负数时: 12345 SELECT substr('ABCDEF',-2); substr-------- EF(1 row)
  • trim([leading |trailing |both] [characters] from string) 描述:从字符串string的开头、结尾或两边删除只包含characters中字符(缺省是一个空白)的最长的字符串。 返回值类型:varchar 示例: 12345 SELECT trim(BOTH 'x' FROM 'xTomxx'); btrim------- Tom(1 row) 12345 SELECT trim(LEADING 'x' FROM 'xTomxx'); ltrim------- Tomxx(1 row) 12345 SELECT trim(TRAILING 'x' FROM 'xTomxx'); rtrim------- xTom(1 row)
  • replace(string text, from text, to text) 描述:在字符串string中查找所有子字符串from的内容并将其替换为子字符串to的内容。 返回值类型:text 示例: 12345 SELECT replace('abcdefabcdef', 'cd', 'XXX'); replace ---------------- abXXXefabXXXef(1 row)
  • substring(string from pattern for escape) 描述:截取匹配SQL正则表达式的子字符串。声明的模式必须匹配整个数据串,否则函数失败并返回空值。为了标识在成功的时候应该返回的模式部分,模式必须包含逃逸字符的两次出现,并且后面要跟上双引号(")。匹配这两个标记之间的模式的文本将被返回。 返回值类型:text 示例: 12345 SELECT substring('Thomas' from '%#"o_a#"_' for '#'); substring----------- oma(1 row)
  • translate(string text, from text, to text) 描述:把在string中包含的任何匹配from中字符的字符转化为对应的在to中的字符。如果from比to长,删掉在from中出现的额外的字符。 返回值类型:text 示例: 12345 SELECT translate('12345', '143', 'ax'); translate----------- a2x5(1 row)
  • substr(string,from,count) 描述: 从参数string中抽取子字符串。 from表示抽取的起始位置。 count表示抽取的子字符串长度。 from为0时,按1处理。 from为正数时,抽取从from开始的count个字符。 from为负数时,抽取从倒数第n个开始的count个字符,n为from的绝对值。 count小于1时,返回null。 返回值类型:varchar 示例: from为正数时: 12345 SELECT substr('ABCDEF',2,2); substr -------- BC(1 row) from为负数时: 12345 SELECT substr('ABCDEF',-3,2); substr -------- DE(1 row)
  • string [NOT] LIKE pattern [ESCAPE escape-character] 描述:模式匹配函数。 如果pattern不包含百分号或者下划线,该模式只代表它本身,这时候LIKE的行为就像等号操作符。在pattern里的下划线(_)匹配任何单个字符;而一个百分号(%)匹配零或多个任何字符。 要匹配下划线或者百分号本身,在pattern里相应的字符必须前导逃逸字符。缺省的逃逸字符是反斜杠,但是用户可以用ESCAPE子句指定一个。要匹配逃逸字符本身,写两个逃逸字符。 返回值类型:boolean 示例: 12345 SELECT 'AA_BBCC' LIKE '%A@_B%' ESCAPE '@' AS RESULT; result-------- t(1 row) 12345 SELECT 'AA_BBCC' LIKE '%A@_B%' AS RESULT; result-------- f(1 row) 12345 SELECT 'AA@_BBCC' LIKE '%A@_B%' AS RESULT; result-------- t(1 row)
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全