华为云用户手册

  • 会话信息函数 current_catalog 描述:当前数据库的名称(在标准SQL中称"catalog")。 返回值类型:name 示例: 1 2 3 4 5 openGauss=# SELECT current_catalog; current_database ------------------ openGauss (1 row) current_database() 描述:当前数据库的名称。 返回值类型:name 示例: 1 2 3 4 5 openGauss=# SELECT current_database(); current_database ------------------ openGauss (1 row) current_query() 描述:由客户端提交的当前执行语句(可能包含多个声明)。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT current_query(); current_query ------------------------- SELECT current_query(); (1 row) current_schema[()] 描述:当前模式的名称。 返回值类型:name 示例: 1 2 3 4 5 openGauss=# SELECT current_schema(); current_schema ---------------- public (1 row) 备注:current_schema返回在搜索路径中第一个顺位有效的模式名。(如果搜索路径为空则返回NULL,没有有效的模式名也返回NULL)。如果创建表或者其他命名对象时没有声明目标模式,则将使用这些对象的模式。 current_schemas(Boolean) 描述:搜索路径中的模式名称。 返回值类型:name[] 示例: 1 2 3 4 5 openGauss=# SELECT current_schemas(true); current_schemas --------------------- {pg_catalog,public} (1 row) 备注: current_schemas(Boolean)返回搜索路径中所有模式名称的数组。布尔选项决定像pg_catalog这样隐含包含的系统模式是否包含在返回的搜索路径中。 搜索路径可以通过运行时设置更改。命令是: 1 SET search_path TO schema [, schema, ...] current_user 描述:当前执行环境下的用户名。 返回值类型:name 示例: 1 2 3 4 5 openGauss=# SELECT current_user; current_user -------------- omm (1 row) 备注:current_user是用于权限检查的用户标识。通常,他表示会话用户,但是可以通过SET ROLE改变他。在函数执行的过程中随着属性SECURITY DEFINER的改变,其值也会改变。 definer_current_user 描述:当前执行环境下的用户名。 返回值类型:name 示例: 1 2 3 4 5 openGauss=# SELECT definer_current_user(); definer_current_user ---------------------- omm (1 row) pg_current_sessionid() 描述:当前执行环境下的会话ID。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT pg_current_sessionid(); pg_current_sessionid ---------------------------- 1579228402.140190434944768 (1 row) 备注:pg_current_sessionid()是用于获取当前执行环境下的会话ID。其组成结构为:时间戳.会话ID,当线程池模式开启(enable_thread_pool=on)时,会话ID为SessionID;而线程池模式关闭时,会话ID为ThreadID。 pg_current_sessid 描述:当前执行环境下的会话ID。 返回值类型:text 示例: openGauss=# select pg_current_sessid(); pg_current_sessid ------------------- 140308875015936 (1 row) 备注:在线程池模式下获得当前会话的会话ID,非线程池模式下获得当前会话对应的后台线程ID。 pg_current_userid 描述:当前用户ID。 返回值类型:text openGauss=# SELECT pg_current_userid(); pg_current_userid ------------------- 10 (1 row) working_version_num() 描述:版本序号信息。返回一个系统兼容性有关的版本序号。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT working_version_num(); working_version_num --------------------- 92231 (1 row) tablespace_oid_name() 描述: 根据表空间oid,查找表空间名称。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# select tablespace_oid_name(1663); tablespace_oid_name --------------------- pg_default (1 row) inet_client_addr() 描述:连接的远端地址。inet_client_addr返回当前客户端的IP地址。 此函数只有在远程连接模式下有效。 返回值类型:inet 示例: 1 2 3 4 5 openGauss=# SELECT inet_client_addr(); inet_client_addr ------------------ 10.10.0.50 (1 row) inet_client_port() 描述:连接的远端端口。inet_client_port返回当前客户端的端口号。 此函数只有在远程连接模式下有效。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT inet_client_port(); inet_client_port ------------------ 33143 (1 row) inet_server_addr() 描述:连接的本地地址。inet_server_addr返回服务器接收当前连接用的IP地址。 此函数只有在远程连接模式下有效。 返回值类型:inet 示例: 1 2 3 4 5 openGauss=# SELECT inet_server_addr(); inet_server_addr ------------------ 10.10.0.13 (1 row) inet_server_port() 描述:连接的本地端口。inet_server_port返回接收当前连接的端口号。如果是通过Unix-domain socket连接的,则所有这些函数都返回NULL。 此函数只有在远程连接模式下有效。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT inet_server_port(); inet_server_port ------------------ 8000 (1 row) pg_backend_pid() 描述:当前会话连接的服务进程的进程ID。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT pg_backend_pid(); pg_backend_pid ----------------- 140229352617744 (1 row) pg_conf_load_time() 描述:配置加载时间。pg_conf_load_time返回最后加载服务器配置文件的时间戳。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT pg_conf_load_time(); pg_conf_load_time ------------------------------ 2017-09-01 16:05:23.89868+08 (1 row) pg_my_temp_schema() 描述:会话的临时模式的OID,不存在则为0。 返回值类型:oid 示例: 1 2 3 4 5 openGauss=# SELECT pg_my_temp_schema(); pg_my_temp_schema ------------------- 0 (1 row) 备注:pg_my_temp_schema返回当前会话中临时模式的OID,如果不存在(没有创建临时表)的话则返回0。如果给定的OID是其它会话中临时模式的OID,pg_is_other_temp_schema则返回true。 pg_is_other_temp_schema(oid) 描述:是否为另一个会话的临时模式。 返回值类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT pg_is_other_temp_schema(25356); pg_is_other_temp_schema ------------------------- f (1 row) pg_listening_channels() 描述:会话正在侦听的信道名称。 返回值类型:setof text 示例: 1 2 3 4 openGauss=# SELECT pg_listening_channels(); pg_listening_channels ----------------------- (0 rows) 备注:pg_listening_channels返回当前会话正在侦听的一组信道名称。 pg_postmaster_start_time() 描述:服务器启动时间。pg_postmaster_start_time返回服务器启动时的timestamp with time zone。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT pg_postmaster_start_time(); pg_postmaster_start_time ------------------------------ 2017-08-30 16:02:54.99854+08 (1 row) pg_get_ruledef(rule_oid) 描述:获取规则的CREATE RULE命令。 返回值类型:text 示例: openGauss=# select * from pg_get_ruledef(24828); pg_get_ruledef ------------------------------------------------------------------- CREATE RULE t1_ins AS ON INSERT TO t1 DO INSTEAD INSERT INTO t2 (id) VALUES (new.id); (1 row) sessionid2pid() 描述: 从sessionid中得到pid信息(例如,gs_session_stat中sessid列)。 返回值类型: int8 示例: 1 2 3 4 5 6 openGauss=# select sessionid2pid(sessid::cstring) from gs_session_stat limit 2; sessionid2pid ----------------- 139973107902208 139973107902208 (2 rows) session_context( 'namespace' , 'parameter') 描述:获取并返回指定namespace下参数parameter的值。 返回值类型:VARCHAR 示例: 1 2 3 4 5 openGauss=# SELECT session_context('USERENV', 'CURRENT_SCHEMA'); session_context ------------------ public (1 row) 备注:当前支持的parameter:current_user, current_schema, client_info, ip_address, sessionid, sid. pg_trigger_depth() 描述:触发器的嵌套层次。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT pg_trigger_depth(); pg_trigger_depth ------------------ 0 (1 row) session_user 描述:会话用户名。 返回值类型:name 示例: 1 2 3 4 5 openGauss=# SELECT session_user; session_user -------------- omm (1 row) 备注:session_user通常是连接当前数据库的初始用户,不过系统管理员可以用SET SESSION AUTHORIZATION修改这个设置。 user 描述:等价于current_user。 返回值类型:name 示例: 1 2 3 4 5 openGauss=# SELECT user; current_user -------------- omm (1 row) getpgusername() 描述:获取数据库用户名。 返回值类型:name 示例: 1 2 3 4 5 openGauss=# select getpgusername(); getpgusername --------------- GaussDB _userna (1 row) getdatabaseencoding() 描述:获取数据库编码方式。 返回值类型:name 示例: 1 2 3 4 5 openGauss=# select getdatabaseencoding(); getdatabaseencoding --------------------- SQL_ASCII (1 row) version() 描述:版本信息。version返回一个描述服务器版本信息的字符串。 返回值类型:text 示例: openGauss=# select version(); version ------------------------------------------------------------------------------------------------------------------------------------------------------------- (GaussDB Kernel VxxxRxxxCxx build fab4f5ea) compiled at 2021-10-24 11:58:22 commit 3086 last mr 6592 release (1 row) opengauss_version() 描述:openGauss版本信息。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# select opengauss_version(); opengauss_version ------------------- 2.0.0 (1 row) gs_deployment() 描述:当前系统的部署形态信息。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# select gs_deployment(); gs_deployment --------------------- BusinessCentralized (1 row) get_hostname() 描述:返回当前节点的hostname。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT get_hostname(); get_hostname -------------- linux-user (1 row) get_nodename() 描述:返回当前节点的名字。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT get_nodename(); get_nodename -------------- datanode1 (1 row) get_schema_oid(cstring) 描述:返回查询schema的oid。 返回值类型:oid 示例: 1 2 3 4 5 openGauss=# SELECT get_schema_oid('public'); get_schema_oid ---------------- 2200 (1 row) get_client_info() 描述:返回客户端信息。 返回值类型:record
  • 条件表达式函数 coalesce(expr1, expr2, ..., exprn) 描述: 返回参数列表中第一个非NULL的参数值。 COALESCE(expr1, expr2) 等价于CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END。 示例: 1 2 3 4 5 openGauss=# SELECT coalesce(NULL,'hello'); coalesce ---------- hello (1 row) 备注: 如果表达式列表中的所有表达式都等于NULL,则本函数返回NULL。 它常用于在显示数据时用缺省值替换NULL。 和CASE表达式一样,COALESCE不会计算不需要用来判断结果的参数;即在第一个非空参数右边的参数不会被计算。 decode(base_expr, compare1, value1, Compare2,value2, … default) 描述:把base_expr与后面的每个compare(n) 进行比较,如果匹配返回相应的value(n)。如果没有发生匹配,则返回default。 示例: 1 2 3 4 5 openGauss=# SELECT decode('A','A',1,'B',2,0); case ------ 1 (1 row) nullif(expr1, expr2) 描述:当且仅当expr1和expr2相等时,NULLIF才返回NULL,否则它返回expr1。 nullif(expr1, expr2) 逻辑上等价于CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END。 示例: 1 2 3 4 5 openGauss=# SELECT nullif('hello','world'); nullif -------- hello (1 row) 备注: 如果两个参数的数据类型不同,则: 若两种数据类型之间存在隐式转换,则以其中优先级较高的数据类型为基准将另一个参数隐式转换成该类型,转换成功则进行计算,转换失败则返回错误。如: 1 2 3 4 5 openGauss=# SELECT nullif('1234'::VARCHAR,123::INT4); nullif -------- 1234 (1 row) 1 2 openGauss=# SELECT nullif('1234'::VARCHAR,'2012-12-24'::DATE); ERROR: invalid input syntax for type timestamp: "1234" 若两种数据类型之间不存在隐式转换,则返回错误 。如: 1 2 3 4 5 openGauss=# SELECT nullif(TRUE::BOOLEAN,'2012-12-24'::DATE); ERROR: operator does not exist: boolean = timestamp without time zone LINE 1: SELECT nullif(TRUE::BOOLEAN,'2012-12-24'::DATE) FROM sys_dummy; ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. nvl( expr1 , expr2 ) 描述: 如果expr1为NULL则返回expr2。 如果expr1非NULL,则返回expr1。 示例: 1 2 3 4 5 openGauss=# SELECT nvl('hello','world'); nvl ------- hello (1 row) 备注:参数expr1和expr2可以为任意类型,当NVL的两个参数不属于同类型时,看第二个参数是否可以向第一个参数进行隐式转换。如果可以则返回第一个参数类型,否则返回错误。 greatest(expr1 [, ...]) 描述:获取并返回参数列表中值最大的表达式的值。 返回值类型: 示例: 1 2 3 4 5 openGauss=# SELECT greatest(1*2,2-3,4-1); greatest ---------- 3 (1 row) 1 2 3 4 5 openGauss=# SELECT greatest('HARRY', 'HARRIOT', 'HAROLD'); greatest ---------- HARRY (1 row) least(expr1 [, ...]) 描述:获取并返回参数列表中值最小的表达式的值。 示例: 1 2 3 4 5 openGauss=# SELECT least(1*2,2-3,4-1); least ------- -1 (1 row) 1 2 3 4 5 openGauss=# SELECT least('HARRY','HARRIOT','HAROLD'); least -------- HAROLD (1 row) EMPTY_BLOB() 描述:使用EMPTY_BLOB在INSERT或UPDATE语句中初始化一个BLOB变量,取值为NULL。 返回值类型:BLOB 示例: 1 2 3 4 5 6 --新建表 openGauss=# CREATE TABLE blob_tb(b blob,id int); --插入数据 openGauss=# INSERT INTO blob_tb VALUES (empty_blob(),1); --删除表 openGauss=# DROP TABLE blob_tb; 备注:使用DBE_LOB.GET_LENGTH求得的长度为0。
  • 序列号生成函数 generate_series(start, stop) 描述:生成一个数值序列,从start到stop,步长为1。 参数类型:int、bigint、numeric 返回值类型:setof int、setof bigint、setof numeric(与参数类型相同) generate_series(start, stop, step) 描述:生成一个数值序列,从start到stop,步长为step。 参数类型:int、bigint、numeric 返回值类型:setof int、setof bigint、setof numeric(与参数类型相同) generate_series(start, stop, step interval) 描述:生成一个数值序列,从start到stop,步长为step。 参数类型:timestamp或timestamp with time zone 返回值类型:setof timestamp或setof timestamp with time zone(与参数类型相同)
  • 下标生成函数 generate_subscripts(array anyarray, dim int) 描述:生成一系列包括给定数组的下标。 返回值类型:setof int generate_subscripts(array anyarray, dim int, reverse boolean) 描述:生成一系列包括给定数组的下标。当reverse为真时,该系列则以相反的顺序返回。 返回值类型:setof int
  • 示例 byteawithoutorderwithequalcolin、byteawithoutorderwithequalcolout等函数为数据库内核中数据类型byteawithoutorderwithequalcol指定的in、out、send、recv等读写格式转换函数,具体可参考bytea类型的byteain、byteaout等函数,但会对本地的cek进行验证,需要密文字段中有本地存在的cekoid才能执行成功。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -- 例如存在加密表int_type,int_col2为其加密列 -- 使用非密态客户端连接数据库,查询加密列密文 openGauss=# select int_col2 from int_type; int_col2 ------------------------------------------------------------------------------------------------------------------------------------------------------ \x01c35301bf421c8edf38c34704bcc82838742917778ccb402a1b7452ad4a6ac7371acc0ac33100000035fe3424919854c86194f1aa5bb4e1ca656e8fc6d05324a1419b69f488bdc3c6 (1 row) -- 将加密列密文当做byteawithoutorderwithequalcolin入参,格式从cstring输入转码转化成内部byteawithoutorderwithequalcol形式 openGauss=# select byteawithoutorderwithequalcolin('\x01c35301bf421c8edf38c34704bcc82838742917778ccb402a1b7452ad4a6ac7371acc0ac33100000035fe3424919854c86194f1aa5bb4e1ca656e8fc6d05324a1419b69f488bdc3c6'); byteawithoutorderwithequalcolin ------------------------------------------------------------------------------------------------------------------------------------------------------ \x01c35301bf421c8edf38c34704bcc82838742917778ccb402a1b7452ad4a6ac7371acc0ac33100000035fe3424919854c86194f1aa5bb4e1ca656e8fc6d05324a1419b69f488bdc3c6 (1 row) 由于byteawithoutorderwithequalcolin等的实现会对cek进行查找,并且判断是否为正常加密后的数据类型。 因此如果用户输入数据的格式不是加密后的数据格式,并且在本地不存在对应cek的情况下,会返回错误。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 openGauss=# SELECT * FROM byteawithoutorderwithequalcolsend('\x907219912381298461289346129'::byteawithoutorderwithequalcol); ERROR: cek with OID 596711794 not found LINE 1: SELECT * FROM byteawithoutorderwithequalcolsend('\x907219912... ^ openGauss=# SELECT * FROM byteawithoutordercolout('\x90721901999999999999912381298461289346129'); ERROR: cek with OID 2566986098 not found LINE 1: SELECT * FROM byteawithoutordercolout('\x9072190199999999999... SELECT * FROM byteawithoutorderwithequalcolrecv('\x90721901999999999999912381298461289346129'::byteawithoutorderwithequalcol); ERROR: cek with OID 2566986098 not found ^ openGauss=# SELECT * FROM byteawithoutorderwithequalcolsend('\x90721901999999999999912381298461289346129'::byteawithoutorderwithequalcol); ERROR: cek with OID 2566986098 not found LINE 1: SELECT * FROM byteawithoutorderwithequalcolsend('\x907219019... ^
  • 账本数据库的函数 当前特性是实验室特性,使用时请联系华为工程师提供技术支持。 get_dn_hist_relhash(text, text) 描述:返回指定防篡改用户表的表级数据hash值。该函数仅供分布式使用。 参数类型:text 返回值类型:hash16 ledger_hist_check(text, text) 描述:校验指定防篡改用户表的表级数据hash值与其对应历史表hash一致性。 参数类型:text 返回值类型:Boolean ledger_hist_repair(text, text) 描述:修复指定防篡改用户表对应的历史表hash值,使之与用户表hash一致,返回hash差值。 参数类型:text 返回值类型:hash16 ledger_hist_archive(text, text) 描述:归档指定防篡改用户表对应的历史表至审计日志目录中hist_back文件夹下。 参数类型:text 返回值类型:Boolean ledger_gchain_check(text, text) 描述:校验指定防篡改用户表对应的历史表hash与全局历史表对应的relhash一致性。 参数类型:text 返回值类型:Boolean ledger_gchain_repair(text, text) 描述:修复指定防篡改用户表在全局历史表中的relhash,使之与其历史表hash一致,返回hash差值。 参数类型:text 返回值类型:hash16 ledger_gchain_archive(void) 描述:归档全局历史表至审计日志目录中hist_back文件夹下。 参数类型:void 返回值类型:Boolean hash16in(cstring) 描述:将输入16进制字符串转化成内部hash16形式。 参数类型:cstring 返回值类型:hash16 hash16out(hash16) 描述:将内部hash16类型的数据转码转化为16进制cstring类型。 参数类型:hash16 返回值类型:cstring hash32in(cstring) 描述:将输入16进制字符串(32个字符)转化成内部类型hash32形式。 参数类型:cstring 返回值类型:hash32 hash32out(hash32) 描述:将内部hash32类型的数据转码转化为16进制cstring类型。 参数类型:cstring 返回值类型:hash32 父主题: 函数和操作符
  • 范围函数 numrange(numeric, numeric, [text]) 描述:表示一个范围。 返回类型:范围元素类型 示例: 1 2 3 4 5 6 7 8 9 10 openGauss=# SELECT numrange(1.1,2.2) AS RESULT; result -------- [1.1,2.2) (1 row) openGauss=# SELECT numrange(1.1,2.2, '()') AS RESULT; result -------- (1.1,2.2) (1 row) lower(anyrange) 描述:范围的下界 返回类型:范围元素类型 示例: 1 2 3 4 5 openGauss=# SELECT lower(numrange(1.1,2.2)) AS RESULT; result -------- 1.1 (1 row) upper(anyrange) 描述:范围的上界 返回类型:范围元素类型 示例: 1 2 3 4 5 openGauss=# SELECT upper(numrange(1.1,2.2)) AS RESULT; result -------- 2.2 (1 row) isempty(anyrange) 描述:范围是否为空 返回类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isempty(numrange(1.1,2.2)) AS RESULT; result -------- f (1 row) lower_inc(anyrange) 描述:是否包含下界 返回类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT lower_inc(numrange(1.1,2.2)) AS RESULT; result -------- t (1 row) upper_inc(anyrange) 描述:是否包含上界 返回类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT upper_inc(numrange(1.1,2.2)) AS RESULT; result -------- f (1 row) lower_inf(anyrange) 描述:下界是否为无穷 返回类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT lower_inf('(,)'::daterange) AS RESULT; result -------- t (1 row) upper_inf(anyrange) 描述:上界是否为无穷 返回类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT upper_inf('(,)'::daterange) AS RESULT; result -------- t (1 row) 如果范围是空或者需要的界限是无穷的,lower和upper函数将返回null。lower_inc、upper_inc、lower_inf和upper_inf函数均对空范围返回false。
  • 数组函数 array_append(anyarray, anyelement) 描述:向数组末尾添加元素,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_append(ARRAY[1,2], 3) AS RESULT; result --------- {1,2,3} (1 row) array_prepend(anyelement, anyarray) 描述:向数组开头添加元素,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_prepend(1, ARRAY[2,3]) AS RESULT; result --------- {1,2,3} (1 row) array_cat(anyarray, anyarray) 描述:连接两个数组,支持多维数组。 返回类型:anyarray 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# SELECT array_cat(ARRAY[1,2,3], ARRAY[4,5]) AS RESULT; result ------------- {1,2,3,4,5} (1 row) openGauss=# SELECT array_cat(ARRAY[[1,2],[4,5]], ARRAY[6,7]) AS RESULT; result --------------------- {{1,2},{4,5},{6,7}} (1 row) array_union(anyarray, anyarray) 描述:连接两个数组,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_union(ARRAY[1,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {1,2,3,3,4,5} (1 row) array_union_distinct(anyarray, anyarray) 描述:连接两个数组,并去重,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_union_distinct(ARRAY[1,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {1,2,3,4,5} (1 row) array_intersect(anyarray, anyarray) 描述:两个数组取交集,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_intersect(ARRAY[1,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {3} (1 row) array_intersect_distinct(anyarray, anyarray) 描述:两个数组取交集,并去重,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_intersect_distinct(ARRAY[1,2,2], ARRAY[2,2,4,5]) AS RESULT; result ------------- {2} (1 row) array_except(anyarray, anyarray) 描述:两个数组取差,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_except(ARRAY[1,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {1,2} (1 row) array_except_distinct(anyarray, anyarray) 描述:两个数组取差,并去重,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_except_distinct(ARRAY[1,2,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {1,2} (1 row) array_ndims(anyarray) 描述:返回数组的维数。 返回类型:int 示例: 1 2 3 4 5 openGauss=# SELECT array_ndims(ARRAY[[1,2,3], [4,5,6]]) AS RESULT; result -------- 2 (1 row) array_dims(anyarray) 描述:返回数组各个维度中的低位下标值和高位下标值。 返回类型:text 示例: 1 2 3 4 5 openGauss=# SELECT array_dims(ARRAY[[1,2,3], [4,5,6]]) AS RESULT; result ------------ [1:2][1:3] (1 row) array_length(anyarray, int) 描述:返回指定数组维度的长度。int为指定数组维度。 返回类型:int 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# SELECT array_length(array[1,2,3], 1) AS RESULT; result -------- 3 (1 row) openGauss=# SELECT array_length(array[[1,2,3],[4,5,6]], 2) AS RESULT; result -------- 3 (1 row) array_lower(anyarray, int) 描述:返回指定数组维数的下界。int为指定数组维度。 返回类型:int 示例: 1 2 3 4 5 openGauss=# SELECT array_lower('[0:2]={1,2,3}'::int[], 1) AS RESULT; result -------- 0 (1 row) array_upper(anyarray, int) 描述:返回指定数组维数的上界。int为指定数组维度。 返回类型:int 示例: 1 2 3 4 5 openGauss=# SELECT array_upper(ARRAY[1,8,3,7], 1) AS RESULT; result -------- 4 (1 row) array_upper(anyarray, int) 描述:返回指定数组维数的上界。int为指定数组维度。 返回类型:int 示例: openGauss=# SELECT array_upper(ARRAY[1,8,3,7], 1) AS RESULT; result -------- 4 (1 row) array_remove(anyarray, anyelement) 描述:移除数组中的所有指定元素。仅支持一维数组。 返回类型:anyarray 示例: openGauss=# SELECT array_remove(ARRAY[1,8,8,7], 8) AS RESULT; result -------- {1,7} (1 row) array_to_string(anyarray, text [, text]) 描述:使用第一个text作为数组的新分隔符,使用第二个text替换数组值为null的值。 返回类型:text 示例: 1 2 3 4 5 openGauss=# SELECT array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') AS RESULT; result ----------- 1,2,3,*,5 (1 row) array_delete(anyarray) 描述:清空数组中的元素并返回一个同类型的空数组。 返回类型:anyarray 示例: openGauss=# SELECT array_delete(ARRAY[1,8,3,7]) AS RESULT; result -------- {} (1 row) array_deleteidx(anyarray, int) 描述:从数组中删除指定下标的元素并返回剩余元素组成的数组。 返回类型:anyarray 示例: openGauss=# SELECT array_deleteidx(ARRAY[1,2,3,4,5], 1) AS RESULT; result ----------- {2,3,4,5} (1 row) array_extendnull(anyarray, int) 描述:往数组尾部添加指定个数的null空元素。 返回类型:anyarray 示例: openGauss=# SELECT array_extendnull(ARRAY[1,8,3,7],1) AS RESULT; result -------------- {1,8,3,7,null} (1 row) array_trim(anyarray, int) 描述:从数组尾部删除指定个数个元素。 返回类型:anyarray 示例: openGauss=# SELECT array_trim(ARRAY[1,8,3,7],1) AS RESULT; result --------- {1,8,3} (1 row) array_exists(anyarray, int) 描述:检查第二个参数是否是数组的合法下标。 返回类型:boolean 示例: openGauss=# SELECT array_exists(ARRAY[1,8,3,7],1) AS RESULT; result -------- t (1 row) array_next(anyarray, int) 描述:根据第二个入参返回数组中指定下标元素的下一个元素的下标。 返回类型:int 示例: openGauss=# SELECT array_next(ARRAY[1,8,3,7],1) AS RESULT; result -------- 2 (1 row) array_prior(anyarray, int) 描述:根据第二个入参返回数组中指定下标元素的上一个元素的下标。 返回类型:int 示例: openGauss=# SELECT array_prior(ARRAY[1,8,3,7],2) AS RESULT; result -------- 1 (1 row) string_to_array(text, text [, text]) 描述:使用第二个text指定分隔符,使用第三个可选的text作为NULL值替换模板,如果分隔后的子串与第三个可选的text完全匹配,则将其替换为NULL。 返回类型:text[] 示例: 1 2 3 4 5 6 7 8 9 10 openGauss=# SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'yy') AS RESULT; result -------------- {xx,NULL,zz} (1 row) openGauss=# SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'y') AS RESULT; result ------------ {xx,yy,zz} (1 row) unnest(anyarray) 描述:扩大一个数组为一组行。 返回类型:setof anyelement 示例: 1 2 3 4 5 6 openGauss=# SELECT unnest(ARRAY[1,2]) AS RESULT; result -------- 1 2 (2 rows)
  • SEQUENCE函数 序列函数为用户从序列对象中获取后续的序列值提供了简单的多用户安全的方法。 nextval(regclass) 描述:递增序列并返回新值。 为了避免从同一个序列获取值的并发事务被阻塞,nextval操作不会回滚;也就是说,一旦一个值已经被抓取,那么就认为它已经被用过了,并且不会再被返回。即使该操作处于事务中,当事务之后中断,或者如果调用查询结束不使用该值,也是如此。这种情况将在指定值的顺序中留下未使用的"空洞"。因此,GaussDB序列对象不能用于获得"无间隙"序列。 nextval函数只能在主机上执行,备机不支持执行此函数。 返回类型:numeric nextval函数有两种调用方式(其中第二种调用方式目前不支持Sequence命名中有特殊字符"."的情况),如下: 示例1: 1 2 3 4 5 openGauss=# select nextval('seqDemo'); nextval --------- 2 (1 row) 示例2: 1 2 3 4 5 openGauss=# select seqDemo.nextval; nextval --------- 2 (1 row) currval(regclass) 返回当前会话里最近一次nextval返回的指定的sequence的数值。如果当前会话还没有调用过指定的sequence的nextval,那么调用currval将会报错。 返回类型:numeric currval函数有两种调用方式(其中第二种调用方式目前不支持Sequence命名中有特殊字符"."的情况),如下: 示例1: 1 2 3 4 5 openGauss=# select currval('seq1'); currval --------- 2 (1 row) 示例2: 1 2 3 4 5 openGauss=# select seq1.currval; currval --------- 2 (1 row) lastval() 描述:返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。 返回类型:numeric 示例: 1 2 3 4 5 openGauss=# select lastval(); lastval --------- 2 (1 row) setval(regclass, numeric) 描述:设置序列的当前数值。 返回类型:numeric 示例: 1 2 3 4 5 openGauss=# select setval('seqDemo',1); setval -------- 1 (1 row) setval(regclass, numeric, Boolean) 描述:设置序列的当前数值以及is_called标志。 返回类型:numeric 示例: 1 2 3 4 5 openGauss=# select setval('seqDemo',1,true); setval -------- 1 (1 row) Setval后当前会话会立刻生效,但如果其他会话有缓存的序列值,只能等到缓存值用尽才能感知Setval的作用。所以为了避免序列值冲突,setval要谨慎使用。 因为序列是非事务的,setval造成的改变不会由于事务的回滚而撤销。 nextval函数只能在主机上执行,备机不支持执行此函数。 pg_sequence_last_value(sequence_oid oid, OUT cache_value int16, OUT last_value int16) 描述:获取指定sequence的参数,包含缓存值,当前值。 返回类型:int16,int16 父主题: 函数和操作符
  • 聚合函数 hll_add_agg(hll_hashval) 描述:把哈希后的数据按照分组放到hll中。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 --准备数据 openGauss=# create table t_id(id int); openGauss=# insert into t_id values(generate_series(1,500)); openGauss=# create table t_data(a int, c text); openGauss=# insert into t_data select mod(id,2), id from t_id; --创建表并指定列为hll openGauss=# create table t_a_c_hll(a int, c hll); --根据a列group by对数据分组,把各组数据加到hll中 openGauss=# insert into t_a_c_hll select a, hll_add_agg(hll_hash_text(c)) from t_data group by a; --得到每组数据中hll的Distinct值 openGauss=# select a, #c as cardinality from t_a_c_hll order by a; a | cardinality ---+------------------ 0 | 247.862354346299 1 | 250.908710610377 (2 rows) hll_add_agg(hll_hashval, int32 log2m) 描述:把哈希后的数据按照分组放到hll中, 并指定参数log2m,取值范围是10到16。若输入-1或者NULL,则采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 openGauss=# select hll_cardinality(hll_add_agg(hll_hash_text(c), 12)) from t_data; hll_cardinality ------------------ 497.965240179228 (1 row) hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit) 描述:把哈希后的数据按照分组放到hll中,依次指定参数log2m、log2explicit。 log2explicit取值范围是0到12,0表示直接跳过Explicit模式。该参数可以用来设置Explicit模式的阈值大小,在数据段长度达到2log2explicit后切换为Sparse模式或者Full模式。若输入-1或者NULL,则log2explicit采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 openGauss=# select hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 1)) from t_data; hll_cardinality ------------------ 498.496062953313 (1 row) hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit, int64 log2sparse) 描述:把哈希后的数据按照分组放到hll中, 依次指定参数log2m、log2explicit、log2sparse。,log2sparse取值范围是0到14,0表示直接跳过Sparse模式。该参数可以用来设置Sparse模式的阈值大小,在数据段长度达到2log2sparse后切换为Full模式。若输入-1或者NULL,则log2sparse采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 openGauss=# select hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 6, 10)) from t_data; hll_cardinality ------------------ 498.496062953313 (1 row) hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit, int64 log2sparse, int32 duplicatecheck) 描述:把哈希后的数据按照分组放到hll中, 依次制定参数log2m、log2explicit、log2sparse、duplicatecheck,duplicatecheck取值范围是0或者1,表示是否开启该模式,默认情况下该模式会关闭。若输入-1或者NULL,则duplicatecheck采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 openGauss=# select hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 6, 10, -1)) from t_data; hll_cardinality ------------------ 498.496062953313 (1 row) hll_union_agg(hll) 描述:将多个hll类型数据union成一个hll。 返回值类型:hll 示例: 1 2 3 4 5 6 --将各组中的hll数据union成一个hll,并计算distinct值。 openGauss=# select #hll_union_agg(c) as cardinality from t_a_c_hll; cardinality ------------------ 498.496062953313 (1 row) 注意:当两个或者多个hll数据结构做union的时候,必须要保证其中每一个hll里面的精度参数一样,否则将不可以进行union。同样的约束也适用于函数hll_union(hll,hll)。
  • 废弃函数 由于版本升级,HLL(HyperLogLog)有一些旧的函数废弃,用户可以用类似的函数进行替代。 hll_schema_version(hll) 描述:查看当前hll中的schema version。旧版本schema version是常值1,用来进行hll字段的头部校验,重构后的hll在头部增加字段“HLL”进行校验,schema version不再使用。 hll_regwidth(hll) 描述:查看hll数据结构中桶的位数大小。旧版本桶的位数regwidth取值1~5,会存在较大的误差,也限制了基数估计上限。 重构后regwidth为固定值6,不再使用regwidth变量。 hll_expthresh(hll) 描述:得到当前hll中expthresh大小。采用hll_log2explicit(hll)替代类似功能。 hll_sparseon(hll) 描述:是否启用Sparse模式。采用hll_log2sparse(hll)替代类似功能,0表示关闭Sparse模式。
  • 内置函数 HLL(HyperLogLog)有一系列内置函数用于内部对数据进行处理,一般情况下用户不需要熟知这些函数的使用。详情见表1。 表1 内置函数 函数名称 功能描述 hll_in 以string格式接收hll数据。 hll_out 以string格式发送hll数据。 hll_recv 以bytea格式接收hll数据。 hll_send 以bytea格式发送hll数据。 hll_trans_in 以string格式接收hll_trans_type数据。 hll_trans_out 以string格式发送hll_trans_type数据。 hll_trans_recv 以bytea形式接收hll_trans_type数据。 hll_trans_send 以bytea形式发送hll_trans_type数据。 hll_typmod_in 接收typmod类型数据。 hll_typmod_out 发送typmod类型数据。 hll_hashval_in 接收hll_hashval类型数据。 hll_hashval_out 发送hll_hashval类型数据。 hll_add_trans0 类似于hll_add所提供的功能,初始化时无指定入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans1 类似于hll_add所提供的功能,初始化时指定一个入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans2 类似于hll_add所提供的功能,初始化时指定两个入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans3 类似于hll_add所提供的功能,初始化时指定三个入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans4 类似于hll_add所提供的功能,初始化时指定四个入参,通常在聚合运算的第一阶段DN上使用。 hll_union_trans 类似hll_union所提供的功能,在聚合运算的第一阶段DN上使用。 hll_union_collect 类似于hll_union所提供的功能,在聚合运算第二阶段DN上使用,汇总各个DN上的结果。 hll_pack 在聚合运算第三阶段DN上使用,把自定义hll_trans_type类型最后转换成hll类型。 hll 用于hll类型转换成hll类型,根据输入参数会设定指定参数。 hll_hashval 用于bigint类型转换成hll_hashval类型。 hll_hashval_int4 用于int4类型转换成hll_hashval类型。
  • 功能函数 hll_empty() 描述:创建一个空的hll。 返回值类型:hll 示例: 1 2 3 4 5 openGauss=# select hll_empty(); hll_empty ------------------------------------------------------------ \x484c4c00000000002b05000000000000000000000000000000000000 (1 row) hll_empty(int32 log2m) 描述:创建空的hll并指定参数log2m,取值范围是10到16。若输入-1,则采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# select hll_empty(10); hll_empty ------------------------------------------------------------ \x484c4c00000000002b04000000000000000000000000000000000000 (1 row) openGauss=# select hll_empty(-1); hll_empty ------------------------------------------------------------ \x484c4c00000000002b05000000000000000000000000000000000000 (1 row) hll_empty(int32 log2m, int32 log2explicit) 描述:创建空的hll并依次指定参数log2m、log2explicit。log2explicit取值范围是0到12,0表示直接跳过Explicit模式。该参数可以用来设置Explicit模式的阈值大小,在数据段长度达到2log2explicit后切换为Sparse模式或者Full模式。若输入-1,则log2explicit采用内置默认值。 返回值类型: hll 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# select hll_empty(10, 4); hll_empty ------------------------------------------------------------ \x484c4c00000000001304000000000000000000000000000000000000 (1 row) openGauss=# select hll_empty(10, -1); hll_empty ------------------------------------------------------------ \x484c4c00000000002b04000000000000000000000000000000000000 (1 row) hll_empty(int32 log2m, int32 log2explicit, int64 log2sparse) 描述:创建空的hll并依次指定参数log2m、log2explicit、log2sparse。log2sparse取值范围是0到14,0表示直接跳过Sparse模式。该参数可以用来设置Sparse模式的阈值大小,在数据段长度达到2log2sparse后切换为Full模式。若输入-1,则log2sparse采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# select hll_empty(10, 4, 8); hll_empty ------------------------------------------------------------ \x484c4c00000000001204000000000000000000000000000000000000 (1 row) openGauss=# select hll_empty(10, 4, -1); hll_empty ------------------------------------------------------------ \x484c4c00000000001304000000000000000000000000000000000000 (1 row) hll_empty(int32 log2m, int32 log2explicit, int64 log2sparse, int32 duplicatecheck) 描述:创建空的hll并依次指定参数log2m、log2explicit、log2sparse、duplicatecheck。duplicatecheck取0或者1,表示是否开启该模式,默认情况下该模式会关闭。若输入-1,则duplicatecheck采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# select hll_empty(10, 4, 8, 0); hll_empty ------------------------------------------------------------ \x484c4c00000000001204000000000000000000000000000000000000 (1 row) openGauss=# select hll_empty(10, 4, 8, -1); hll_empty ------------------------------------------------------------ \x484c4c00000000001204000000000000000000000000000000000000 (1 row) hll_add(hll, hll_hashval) 描述:把hll_hashval加入到hll中。 返回值类型:hll 示例: 1 2 3 4 5 openGauss=# select hll_add(hll_empty(), hll_hash_integer(1)); hll_add ---------------------------------------------------------------------------- \x484c4c08000002002b0900000000000000f03f3e2921ff133fbaed3e2921ff133fbaed00 (1 row) hll_add_rev(hll_hashval, hll) 描述:把hll_hashval加入到hll中,和hll_add功能一样,只是参数位置进行了交换。 返回值类型:hll 示例: 1 2 3 4 5 openGauss=# select hll_add_rev(hll_hash_integer(1), hll_empty()); hll_add_rev ---------------------------------------------------------------------------- \x484c4c08000002002b0900000000000000f03f3e2921ff133fbaed3e2921ff133fbaed00 (1 row) hll_eq(hll, hll) 描述:比较两个hll是否相等。 返回值类型:bool 示例: 1 2 3 4 5 openGauss=# select hll_eq(hll_add(hll_empty(), hll_hash_integer(1)), hll_add(hll_empty(), hll_hash_integer(2))); hll_eq -------- f (1 row) hll_ne(hll, hll) 描述:比较两个hll是否不相等。 返回值类型:bool 示例: 1 2 3 4 5 openGauss=# select hll_ne(hll_add(hll_empty(), hll_hash_integer(1)), hll_add(hll_empty(), hll_hash_integer(2))); hll_ne -------- t (1 row) hll_cardinality(hll) 描述:计算hll的distinct值。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# select hll_cardinality(hll_empty() || hll_hash_integer(1)); hll_cardinality ----------------- 1 (1 row) hll_union(hll, hll) 描述:把两个hll数据结构union成一个。 返回值类型:hll 示例: 1 2 3 4 5 openGauss=# select hll_union(hll_add(hll_empty(), hll_hash_integer(1)), hll_add(hll_empty(), hll_hash_integer(2))); hll_union -------------------------------------------------------------------------------------------- \x484c4c10002000002b090000000000000000400000000000000000b3ccc49320cca1ae3e2921ff133fbaed00 (1 row)
  • 日志函数 hll主要存在三种模式Explicit,Sparse,Full。当数据规模比较小的时候会使用Explicit模式,这种模式下distinct值的计算是没有误差的;随着distinct值越来越多,hll会先后转换为Sparse模式和Full模式,这两种模式在计算结果上没有任何区别,只影响hll函数的计算效率和hll对象的存储空间。下面的函数可以用于查看hll的一些参数。 hll_print(hll) 描述:打印hll的一些debug参数信息。 示例: 1 2 3 4 5 openGauss=# select hll_print(hll_empty()); hll_print ------------------------------------------------------------------------------- type=1(HLL_EMPTY), log2m=14, log2explicit=10, log2sparse=12, duplicatecheck=0 (1 row) hll_type(hll) 描述:查看当前hll的类型。返回值具体含义如下:返回值0,表示HLL_UNINIT,未初始化的hll对象;返回值1,表示HLL_EMPTY,hll空对象;返回值2,表示HLL_EXPLICIT,Explicit模式的hll对象;返回值3,表示HLL_SPARSE,Sparse模式的hll对象;返回值4,表示HLL_FULL,Full模式的hll对象;返回值5,表示HLL_UNDEFINED,不合法的hll对象。 示例: 1 2 3 4 5 openGauss=# select hll_type(hll_empty()); hll_type ---------- 1 (1 row) hll_log2m(hll) 描述:查看当前hll数据结构中的log2m数值,log2m是分桶数的对数值,此值会影响最后hll计算distinct误差率,误差率计算公式为±1.04/√(2 ^ log2m)。当显式指定log2m的取值为10-16之间时,hll会设置分桶数为2log2m。当显示指定log2explicit为-1时,会采用内置默认值。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 openGauss=# select hll_log2m(hll_empty()); hll_log2m ----------- 14 (1 row) openGauss=# select hll_log2m(hll_empty(10)); hll_log2m ----------- 10 (1 row) openGauss=# select hll_log2m(hll_empty(-1)); hll_log2m ----------- 14 (1 row) hll_log2explicit(hll) 描述:查看当前hll数据结构中的log2explicit数值。hll通常会由Explicit模式到Sparse模式再到Full模式,这个过程称为promotion hierarchy策略。可以通过调整log2explicit值的大小改变策略,比如log2explicit为0的时候就会跳过Explicit模式而直接进入Sparse模式。当显式指定log2explicit的取值为1-12之间时,hll会在数据段长度超过2log2explicit时转为Sparse模式。当显示指定log2explicit为-1时,会采用内置默认值。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 openGauss=# select hll_log2explicit(hll_empty()); hll_log2explicit ------------------ 10 (1 row) openGauss=# select hll_log2explicit(hll_empty(12, 8)); hll_log2explicit ------------------ 8 (1 row) openGauss=# select hll_log2explicit(hll_empty(12, -1)); hll_log2explicit ------------------ 10 (1 row) hll_log2sparse(hll) 描述:查看当前hll数据结构中的log2sparse数值。hll通常会由Explicit模式到Sparse模式再到Full模式,这个过程称为promotion hierarchy策略。可以通过调整log2sparse值的大小改变策略,比如log2sparse为0的时候就会跳过Sparse模式而直接进入Full模式。当显式指定Sparse的取值为1-14之间时,hll会在数据段长度超过2log2sparse时转为Full模式。当显示指定log2sparse为-1时,会采用内置默认值。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 openGauss=# select hll_log2sparse(hll_empty()); hll_log2sparse ---------------- 12 (1 row) openGauss=# select hll_log2sparse(hll_empty(12, 8, 10)); hll_log2sparse ---------------- 10 (1 row) openGauss=# select hll_log2sparse(hll_empty(12, 8, -1)); hll_log2sparse ---------------- 12 (1 row) hll_duplicatecheck(hll) 描述:是否启用duplicatecheck,0是关闭,1是开启。默认关闭,对于有较多重复值出现的情况,可以开启以提高效率。当显示指定duplicatecheck为-1时,会采用内置默认值。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 openGauss=# select hll_duplicatecheck(hll_empty()); hll_duplicatecheck -------------------- 0 (1 row) openGauss=# select hll_duplicatecheck(hll_empty(12, 8, 10, 1)); hll_duplicatecheck -------------------- 1 (1 row) openGauss=# select hll_duplicatecheck(hll_empty(12, 8, 10, -1)); hll_duplicatecheck -------------------- 0 (1 row)
  • JSON/JSONB支持的函数 array\_to\_json\(anyarray \[, pretty\_bool\]\) 描述:返回JSON类型的数组。一个多维数组成为一个JSON数组的数组。如果pretty\_bool为true,将在一维元素之间添加换行符。 返回类型:json 示例: openGauss=# SELECT array_to_json('{{1,5},{99,100}}'::int[]); array_to_json ------------------ [[1,5],[99,100]] (1 row) row\_to\_json\(record \[, pretty\_bool\]\) 描述:返回JSON类型的行。如果pretty\_bool为true,将在第一级元素之间添加换行符。 返回类型:json 示例: openGauss=# SELECT row_to_json(row(1,'foo')); row_to_json --------------------- {"f1":1,"f2":"foo"} (1 row)
  • 文本检索调试函数 ts_debug([ config regconfig, ] document text, OUT alias text, OUT description text, OUT token text, OUT dictionaries regdictionary[], OUT dictionary regdictionary, OUT lexemes text[]) 描述:测试一个配置。 返回类型:setof record 示例: 1 2 3 4 5 6 7 8 9 openGauss=# SELECT ts_debug('english', 'The Brightest supernovaes'); ts_debug ----------------------------------------------------------------------------------- (asciiword,"Word, all ASCII",The,{english_stem},english_stem,{}) (blank,"Space symbols"," ",{},,) (asciiword,"Word, all ASCII",Brightest,{english_stem},english_stem,{brightest}) (blank,"Space symbols"," ",{},,) (asciiword,"Word, all ASCII",supernovaes,{english_stem},english_stem,{supernova}) (5 rows) ts_lexize(dict regdictionary, token text) 描述:测试一个数据字典。 返回类型:text[] 示例: 1 2 3 4 5 openGauss=# SELECT ts_lexize('english_stem', 'stars'); ts_lexize ----------- {star} (1 row) ts_parse(parser_name text, document text, OUT tokid integer, OUT token text) 描述:测试一个解析。 返回类型:setof record 示例: 1 2 3 4 5 6 7 8 openGauss=# SELECT ts_parse('default', 'foo - bar'); ts_parse ----------- (1,foo) (12," ") (12,"- ") (1,bar) (4 rows) ts_parse(parser_oid oid, document text, OUT tokid integer, OUT token text) 描述:测试一个解析。 返回类型:setof record 示例: 1 2 3 4 5 6 7 8 openGauss=# SELECT ts_parse(3722, 'foo - bar'); ts_parse ----------- (1,foo) (12," ") (12,"- ") (1,bar) (4 rows) ts_token_type(parser_name text, OUT tokid integer, OUT alias text, OUT description text) 描述:获取分析器定义的记号类型。 返回类型:setof record 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 openGauss=# SELECT ts_token_type('default'); ts_token_type -------------------------------------------------------------- (1,asciiword,"Word, all ASCII") (2,word,"Word, all letters") (3,numword,"Word, letters and digits") (4,email,"Email address") (5,url,URL) (6,host,Host) (7,sfloat,"Scientific notation") (8,version,"Version number") (9,hword_numpart,"Hyphenated word part, letters and digits") (10,hword_part,"Hyphenated word part, all letters") (11,hword_asciipart,"Hyphenated word part, all ASCII") (12,blank,"Space symbols") (13,tag,"XML tag") (14,protocol,"Protocol head") (15,numhword,"Hyphenated word, letters and digits") (16,asciihword,"Hyphenated word, all ASCII") (17,hword,"Hyphenated word, all letters") (18,url_path,"URL path") (19,file,"File or path name") (20,float,"Decimal notation") (21,int,"Signed integer") (22,uint,"Unsigned integer") (23,entity,"XML entity") (23 rows) ts_token_type(parser_oid oid, OUT tokid integer, OUT alias text, OUT description text) 描述:获取分析器定义的记号类型。 返回类型:setof record 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 openGauss=# SELECT ts_token_type(3722); ts_token_type -------------------------------------------------------------- (1,asciiword,"Word, all ASCII") (2,word,"Word, all letters") (3,numword,"Word, letters and digits") (4,email,"Email address") (5,url,URL) (6,host,Host) (7,sfloat,"Scientific notation") (8,version,"Version number") (9,hword_numpart,"Hyphenated word part, letters and digits") (10,hword_part,"Hyphenated word part, all letters") (11,hword_asciipart,"Hyphenated word part, all ASCII") (12,blank,"Space symbols") (13,tag,"XML tag") (14,protocol,"Protocol head") (15,numhword,"Hyphenated word, letters and digits") (16,asciihword,"Hyphenated word, all ASCII") (17,hword,"Hyphenated word, all letters") (18,url_path,"URL path") (19,file,"File or path name") (20,float,"Decimal notation") (21,int,"Signed integer") (22,uint,"Unsigned integer") (23,entity,"XML entity") (23 rows) ts_stat(sqlquery text, [ weights text, ] OUT word text, OUT ndoc integer, OUT nentry integer) 描述:获取tsvector列的统计数据。 返回类型:setof record 示例: 1 2 3 4 5 6 openGauss=# SELECT ts_stat('select ''hello world''::tsvector'); ts_stat ------------- (world,1,1) (hello,1,1) (2 rows)
  • macaddr函数 函数trunc(macaddr)返回一个MAC地址,该地址的最后三个字节设置为零。 trunc(macaddr) 描述:把后三个字节置为零。 返回类型:macaddr 示例: 1 2 3 4 5 openGauss=# SELECT trunc(macaddr '12:34:56:78:90:ab') AS RESULT; result ------------------- 12:34:56:00:00:00 (1 row)
  • cidr和inet函数 函数abbrev,host,text主要是为了提供可选的显示格式。 abbrev(inet) 描述:缩写显示格式文本。 返回类型:text 示例: 1 2 3 4 5 openGauss=# SELECT abbrev(inet '10.1.0.0/16') AS RESULT; result ------------- 10.1.0.0/16 (1 row) abbrev(cidr) 描述:缩写显示格式文本。 返回类型:text 示例: 1 2 3 4 5 openGauss=# SELECT abbrev(cidr '10.1.0.0/16') AS RESULT; result --------- 10.1/16 (1 row) broadcast(inet) 描述:网络广播地址。 返回类型:inet 示例: 1 2 3 4 5 openGauss=# SELECT broadcast('192.168.1.5/24') AS RESULT; result ------------------ 192.168.1.255/24 (1 row) family(inet) 描述:抽取地址族,4为IPv4。 返回类型:int 示例: 1 2 3 4 5 openGauss=# SELECT family('127.0.0.1') AS RESULT; result -------- 4 (1 row) host(inet) 描述:将主机地址类型抽出为文本。 返回类型:text 示例: 1 2 3 4 5 openGauss=# SELECT host('192.168.1.5/24') AS RESULT; result ------------- 192.168.1.5 (1 row) hostmask(inet) 描述:为网络构造主机掩码。 返回类型:inet 示例: 1 2 3 4 5 openGauss=# SELECT hostmask('192.168.23.20/30') AS RESULT; result --------- 0.0.0.3 (1 row) masklen(inet) 描述:抽取子网掩码长度。 返回类型:int 示例: 1 2 3 4 5 openGauss=# SELECT masklen('192.168.1.5/24') AS RESULT; result -------- 24 (1 row) netmask(inet) 描述:为网络构造子网掩码。 返回类型:inet 示例: 1 2 3 4 5 openGauss=# SELECT netmask('192.168.1.5/24') AS RESULT; result --------------- 255.255.255.0 (1 row) network(inet) 描述:抽取地址的网络部分。 返回类型:cidr 示例: 1 2 3 4 5 openGauss=# SELECT network('192.168.1.5/24') AS RESULT; result ---------------- 192.168.1.0/24 (1 row) set_masklen(inet, int) 描述:为inet数值设置子网掩码长度。 返回类型:inet 示例: 1 2 3 4 5 openGauss=# SELECT set_masklen('192.168.1.5/24', 16) AS RESULT; result ---------------- 192.168.1.5/16 (1 row) set_masklen(cidr, int) 描述:为cidr数值设置子网掩码长度。 返回类型:cidr 示例: 1 2 3 4 5 openGauss=# SELECT set_masklen('192.168.1.0/24'::cidr, 16) AS RESULT; result ---------------- 192.168.0.0/16 (1 row) text(inet) 描述:把IP地址和掩码长度抽取为文本。 返回类型:text 示例: 1 2 3 4 5 openGauss=# SELECT text(inet '192.168.1.5') AS RESULT; result ---------------- 192.168.1.5/32 (1 row)
  • 几何函数 area(object) 描述:计算图形的面积。 返回类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT area(box '((0,0),(1,1))') AS RESULT; result -------- 1 (1 row) center(object) 描述:计算图形的中心。 返回类型:point 示例: 1 2 3 4 5 openGauss=# SELECT center(box '((0,0),(1,2))') AS RESULT; result --------- (0.5,1) (1 row) diameter(circle) 描述:计算圆的直径。 返回类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT diameter(circle '((0,0),2.0)') AS RESULT; result -------- 4 (1 row) height(box) 描述:矩形的竖直高度。 返回类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT height(box '((0,0),(1,1))') AS RESULT; result -------- 1 (1 row) isclosed(path) 描述:图形是否为闭合路径。 返回类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isclosed(path '((0,0),(1,1),(2,0))') AS RESULT; result -------- t (1 row) isopen(path) 描述:图形是否为开放路径。 返回类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isopen(path '[(0,0),(1,1),(2,0)]') AS RESULT; result -------- t (1 row) length(object) 描述:计算图形的长度。 返回类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT length(path '((-1,0),(1,0))') AS RESULT; result -------- 4 (1 row) npoints(path) 描述:计算路径的顶点数。 返回类型:int 示例: 1 2 3 4 5 openGauss=# SELECT npoints(path '[(0,0),(1,1),(2,0)]') AS RESULT; result -------- 3 (1 row) npoints(polygon) 描述:计算多边形的顶点数。 返回类型:int 示例: 1 2 3 4 5 openGauss=# SELECT npoints(polygon '((1,1),(0,0))') AS RESULT; result -------- 2 (1 row) pclose(path) 描述:把路径转换为闭合路径。 返回类型:path 示例: 1 2 3 4 5 openGauss=# SELECT pclose(path '[(0,0),(1,1),(2,0)]') AS RESULT; result --------------------- ((0,0),(1,1),(2,0)) (1 row) popen(path) 描述:把路径转换为开放路径。 返回类型:path 示例: 1 2 3 4 5 openGauss=# SELECT popen(path '((0,0),(1,1),(2,0))') AS RESULT; result --------------------- [(0,0),(1,1),(2,0)] (1 row) radius(circle) 描述:计算圆的半径。 返回类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT radius(circle '((0,0),2.0)') AS RESULT; result -------- 2 (1 row) width(box) 描述:计算矩形的水平尺寸。 返回类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT width(box '((0,0),(1,1))') AS RESULT; result -------- 1 (1 row)
  • date_part date_part函数是在传统的Ingres函数的基础上制作的(该函数等效于SQL标准函数extract): date_part('field', source) 这里的field参数必须是一个字符串,而不是一个名称。有效的field与extract一样,详细信息请参见EXTRACT。 示例: 1 2 3 4 5 openGauss=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16 (1 row) 1 2 3 4 5 openGauss=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes'); date_part ----------- 4 (1 row)
  • TIMESTAMPDIFF TIMESTAMPDIFF(unit , timestamp_expr1, timestamp_expr2) timestampdiff函数是计算两个日期时间之间(timestamp_expr2-timestamp_expr1)的差值,并以unit形式返回结果。timestamp_expr1,timestamp_expr2必须是一个timestamp、timestamptz、date类型的值表达式。unit表示的是两个日期差的单位。 该函数仅在GaussDB兼容MY类型时(即dbcompatibility = 'B')有效,其他类型不支持该函数。 year 年份。 1 2 3 4 5 openGauss=# SELECT TIMESTAMPDIFF(YEAR, '2018-01-01', '2020-01-01'); timestamp_diff ---------------- 2 (1 row)
  • EXTRACT EXTRACT(field FROM source) extract函数从日期或时间的数值里抽取子域,比如年、小时等。source必须是一个timestamp、time或interval类型的值表达式(类型为date的表达式转换为timestamp,因此也可以用)。field是一个标识符或者字符串,它指定从源数据中抽取的域。extract函数返回类型为double precision的数值。field的取值范围如下所示。 century 世纪。 第一个世纪从0001-01-01 00:00:00 AD开始。这个定义适用于所有使用阳历的国家。没有0世纪,直接从公元前1世纪到公元1世纪。 示例: 1 2 3 4 5 openGauss=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13'); date_part ----------- 20 (1 row) day 如果source为timestamp,表示月份里的日期(1-31)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16 (1 row) 如果source为interval,表示天数。 1 2 3 4 5 openGauss=# SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute'); date_part ----------- 40 (1 row) decade 年份除以10。 1 2 3 4 5 openGauss=# SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 200 (1 row) dow 每周的星期几,星期天(0)到星期六(6)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 5 (1 row) doy 一年的第几天(1~365/366)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 47 (1 row) epoch 如果source为timestamp with time zone,表示自1970-01-01 00:00:00-00 UTC以来的秒数(结果可能是负数); 如果source为date和timestamp,表示自1970-01-01 00:00:00-00当地时间以来的秒数; 如果source为interval,表示时间间隔的总秒数。 1 2 3 4 5 openGauss=# SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08'); date_part -------------- 982384720.12 (1 row) 1 2 3 4 5 openGauss=# SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'); date_part ----------- 442800 (1 row) 将epoch值转换为时间戳的方法。 1 2 3 4 5 openGauss=# SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720.12 * INTERVAL '1 second' AS RESULT; result --------------------------- 2001-02-17 12:38:40.12+08 (1 row) hour 小时域(0-23)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 20 (1 row) isodow 一周的第几天(1-7)。 星期一为1,星期天为7。 除了星期天外,都与dow相同。 1 2 3 4 5 openGauss=# SELECT EXTRACT(ISODOW FROM TIMESTAMP '2001-02-18 20:38:40'); date_part ----------- 7 (1 row) isoyear 日期中的ISO 8601标准年(不适用于间隔)。 每个带有星期一开始的周中包含1月4日的ISO年,所以在年初的1月或12月下旬的ISO年可能会不同于阳历的年。详细信息请参见后续的week描述。 1 2 3 4 5 openGauss=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01'); date_part ----------- 2005 (1 row) 1 2 3 4 5 openGauss=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); date_part ----------- 2006 (1 row) microseconds 秒域(包括小数部分)乘以1,000,000。 1 2 3 4 5 openGauss=# SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500000 (1 row) millennium 千年。 20世纪(19xx年)里面的年份在第二个千年里。第三个千年从2001年1月1日零时开始。 1 2 3 4 5 openGauss=# SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 3 (1 row) milliseconds 秒域(包括小数部分)乘以1000。请注意它包括完整的秒。 1 2 3 4 5 openGauss=# SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500 (1 row) minute 分钟域(0-59)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 38 (1 row) month 如果source为timestamp,表示一年里的月份数(1-12)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2 (1 row) 如果source为interval,表示月的数目,然后对12取模(0-11)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months'); date_part ----------- 1 (1 row) quarter 该天所在的该年的季度(1-4)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 1 (1 row) second 秒域,包括小数部分(0-59)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(SECOND FROM TIME '17:12:28.5'); date_part ----------- 28.5 (1 row) timezone 与UTC的时区偏移量,单位为秒。正数对应UTC东边的时区,负数对应UTC西边的时区。 timezone_hour 时区偏移量的小时部分。 timezone_minute 时区偏移量的分钟部分。 week 该天在所在的年份里是第几周。ISO 8601定义一年的第一周包含该年的一月四日(ISO-8601 的周从星期一开始)。换句话说,一年的第一个星期四在第一周。 在ISO定义里,一月的头几天可能是前一年的第52或者第53周,十二月的后几天可能是下一年第一周。比如,2005-01-01是2004年的第53周,而2006-01-01是2005年的第52周,2012-12-31是2013年的第一周。建议isoyear字段和week一起使用以得到一致的结果。 1 2 3 4 5 openGauss=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 7 (1 row) year 年份域。 1 2 3 4 5 openGauss=# SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2001 (1 row)
  • 时间/日期函数 age(timestamp, timestamp) 描述:将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负,入参可以都带timezone或都不带timezone。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT age(timestamp '2001-04-10', timestamp '1957-06-13'); age ------------------------- 43 years 9 mons 27 days (1 row) age(timestamp) 描述:当前时间和参数相减,入参可以带或者不带timezone。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT age(timestamp '1957-06-13'); age ------------------------- 60 years 2 mons 18 days (1 row) clock_timestamp() 描述:实时时钟的当前时间戳。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT clock_timestamp(); clock_timestamp ------------------------------- 2017-09-01 16:57:36.636205+08 (1 row) current_date 描述:当前日期。 返回值类型:date 示例: 1 2 3 4 5 openGauss=# SELECT current_date; date ------------ 2017-09-01 (1 row) current_time 描述:当前时间。 返回值类型:time with time zone 示例: 1 2 3 4 5 openGauss=# SELECT current_time; timetz -------------------- 16:58:07.086215+08 (1 row) current_timestamp 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT current_timestamp; pg_systimestamp ------------------------------ 2017-09-01 16:58:19.22173+08 (1 row) date_part(text, timestamp) 描述:获取日期/时间值中子域的值,例如年或者小时的值。等效于extract(field from timestamp)。 timestamp类型:abstime、date、interval、reltime、time with time zone、time without time zone、timestamp with time zone、timestamp without time zone。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT date_part('hour', timestamp '2001-02-16 20:38:40'); date_part ----------- 20 (1 row) date_part(text, interval) 描述:获取日期/时间值中子域的值。获取月份值时,如果月份值大于12,则取与12的模。等效于extract(field from timestamp)。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT date_part('month', interval '2 years 3 months'); date_part ----------- 3 (1 row) date_trunc(text, timestamp) 描述:截取到参数text指定的精度。 返回值类型:interval、timestamp with time zone、timestamp without time zone 示例: 1 2 3 4 5 openGauss=# SELECT date_trunc('hour', timestamp '2001-02-16 20:38:40'); date_trunc --------------------- 2001-02-16 20:00:00 (1 row) trunc(timestamp) 描述:默认按天截取。 示例: 1 2 3 4 openGauss=# SELECT trunc(timestamp '2001-02-16 20:38:40'); trunc --------------------- 2001-02-16 00:00:00 (1 row) trunc(arg1, arg2) 描述:截取到arg2指定的精度。 arg1类型:interval、timestamp with time zone、timestamp without time zone arg2类型:text 返回值类型:interval、timestamp with time zone、timestamp without time zone 示例: 1 2 3 4 openGauss=# SELECT trunc(timestamp '2001-02-16 20:38:40', 'hour'); trunc --------------------- 2001-02-16 20:00:00 (1 row) daterange(arg1, arg2) 描述:获取时间边界信息。arg1和arg2的类型为date。 返回值类型:daterange 示例: 1 2 3 4 5 openGauss=# select daterange('2000-05-06','2000-08-08'); daterange ------------------------- [2000-05-06,2000-08-08) (1 row) daterange(arg1, arg2, text) 描述:获取时间边界信息。arg1和arg2的类型为date,text类型为text。 返回值类型:daterange 示例: 1 2 3 4 5 openGauss=# select daterange('2000-05-06','2000-08-08','[]'); daterange ------------------------- [2000-05-06,2000-08-09) (1 row) extract(field from timestamp) 描述:获取小时的值。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT extract(hour from timestamp '2001-02-16 20:38:40'); date_part ----------- 20 (1 row) extract(field from interval) 描述:获取月份的值。如果大于12,则取与12的模。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT extract(month from interval '2 years 3 months'); date_part ----------- 3 (1 row) isfinite(date) 描述:测试是否为有效日期。 返回值类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isfinite(date '2001-02-16'); isfinite ---------- t (1 row) isfinite(timestamp) 描述:测试判断是否为有效时间。 返回值类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isfinite(timestamp '2001-02-16 21:28:30'); isfinite ---------- t (1 row) isfinite(interval) 描述:测试是否为有效区间。 返回值类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isfinite(interval '4 hours'); isfinite ---------- t (1 row) justify_days(interval) 描述:将时间间隔以月(30天为一月)为单位。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT justify_days(interval '35 days'); justify_days -------------- 1 mon 5 days (1 row) justify_hours(interval) 描述:将时间间隔以天(24小时为一天)为单位。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT JUSTIFY_HOURS(INTERVAL '27 HOURS'); justify_hours ---------------- 1 day 03:00:00 (1 row) justify_interval(interval) 描述:结合justify_days和justify_hours,调整interval。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT JUSTIFY_INTERVAL(INTERVAL '1 MON -1 HOUR'); justify_interval ------------------ 29 days 23:00:00 (1 row) localtime 描述:当前时间。 返回值类型:time 示例: 1 2 3 4 5 openGauss=# SELECT localtime AS RESULT; result ---------------- 16:05:55.664681 (1 row) localtimestamp 描述:当前日期及时间。 返回值类型:timestamp 示例: 1 2 3 4 5 openGauss=# SELECT localtimestamp; timestamp ---------------------------- 2017-09-01 17:03:30.781902 (1 row) now() 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT now(); now ------------------------------- 2017-09-01 17:03:42.549426+08 (1 row) timenow 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# select timenow(); timenow ------------------------ 2020-06-23 20:36:56+08 (1 row) numtodsinterval(num, interval_unit) 描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('DAY' | 'HOUR' | 'MINUTE' | 'SECOND')。 可以通过设置参数IntervalStyle为a,兼容该函数interval输出格式。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 openGauss=# SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ----------------- 100:00:00 (1 row) openGauss=# SET intervalstyle = a; SET openGauss=# SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ------------------------------- +000000004 04:00:00.000000000 (1 row) pg_sleep(seconds) 描述:服务器线程延迟时间,单位为秒。 返回值类型:void 示例: 1 2 3 4 5 openGauss=# SELECT pg_sleep(10); pg_sleep ---------- (1 row) statement_timestamp() 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT statement_timestamp(); statement_timestamp ------------------------------- 2017-09-01 17:04:39.119267+08 (1 row) sysdate 描述:当前日期及时间。 返回值类型:timestamp 示例: 1 2 3 4 5 openGauss=# SELECT sysdate; sysdate --------------------- 2017-09-01 17:04:49 (1 row) timeofday() 描述:当前日期及时间(像clock_timestamp,但是返回时为text)。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT timeofday(); timeofday ------------------------------------- Fri Sep 01 17:05:01.167506 2017 CS T (1 row) transaction_timestamp() 描述:当前日期及时间,与current_timestamp等效。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT transaction_timestamp(); transaction_timestamp ------------------------------- 2017-09-01 17:05:13.534454+08 (1 row) add_months(d,n) 描述:用于计算时间点d再加上n个月的时间。 d:timestamp类型的值,以及可以隐式转换为timestamp类型的值。 n:INTEGER类型的值,以及可以隐式转换为INTEGER类型的值。 返回值类型:timestamp 示例: 1 2 3 4 5 openGauss=# SELECT add_months(to_date('2017-5-29', 'yyyy-mm-dd'), 11) FROM sys_dummy; add_months --------------------- 2018-04-29 00:00:00 (1 row) last_day(d) 描述:用于计算时间点d当月最后一天的时间。 返回值类型:timestamp 示例: 1 2 3 4 5 openGauss=# select last_day(to_date('2017-01-01', 'YYYY-MM-DD')) AS cal_result; cal_result --------------------- 2017-01-31 00:00:00 (1 row)
  • 数字操作函数 abs(x) 描述:绝对值。 返回值类型:和输入相同。 示例: 1 2 3 4 5 openGauss=# SELECT abs(-17.4); abs ------ 17.4 (1 row) acos(x) 描述:反余弦。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT acos(-1); acos ------------------ 3.14159265358979 (1 row) asin(x) 描述:反正弦。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT asin(0.5); asin ------------------ .523598775598299 (1 row) atan(x) 描述:反正切。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT atan(1); atan ------------------ .785398163397448 (1 row) atan2(y, x) 描述:y/x的反正切。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT atan2(2, 1); atan2 ------------------ 1.10714871779409 (1 row) bitand(integer, integer) 描述:计算两个数字与运算(&)的结果。 返回值类型:bigint类型数字。 示例: 1 2 3 4 5 openGauss=# SELECT bitand(127, 63); bitand -------- 63 (1 row) cbrt(dp) 描述:立方根。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT cbrt(27.0); cbrt ------ 3 (1 row) ceil(x) 描述:不小于参数的最小的整数。 返回值类型:整数。 示例: 1 2 3 4 5 openGauss=# SELECT ceil(-42.8); ceil ------ -42 (1 row) ceiling(dp or numeric) 描述:不小于参数的最小整数(ceil的别名)。 返回值类型:dp or numeric,不考虑隐式类型转换的情况下与输入相同。 示例: 1 2 3 4 5 openGauss=# SELECT ceiling(-95.3); ceiling --------- -95 (1 row) cos(x) 描述:余弦。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT cos(-3.1415927); cos ------------------- -.999999999999999 (1 row) cot(x) 描述:余切。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT cot(1); cot ------------------ .642092615934331 (1 row) degrees(dp) 描述:把弧度转为角度。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT degrees(0.5); degrees ------------------ 28.6478897565412 (1 row) div(y numeric, x numeric) 描述:y除以x的商的整数部分。 返回值类型:numeric 示例: 1 2 3 4 5 openGauss=# SELECT div(9,4); div ----- 2 (1 row) exp(x) 描述:自然指数。 返回值类型:dp or numeric,不考虑隐式类型转换的情况下与输入相同。 示例: 1 2 3 4 5 openGauss=# SELECT exp(1.0); exp -------------------- 2.7182818284590452 (1 row) floor(x) 描述:不大于参数的最大整数。 返回值类型:与输入相同。 示例: 1 2 3 4 5 openGauss=# SELECT floor(-42.8); floor ------- -43 (1 row) int1(in) 描述:将传入的text参数转换为int1类型值并返回。 返回值类型:int1 示例: 1 2 3 4 5 6 7 8 9 10 openGauss=# select int1('123'); int1 ------ 123 (1 row) openGauss=# select int1('a'); int1 ------ 0 (1 row) int2(in) 描述:将传入参数转换为int2类型值并返回。 支持的入参类型包括float4,float8,int16,numeric,text。 返回值类型:int2 示例: 1 2 3 4 5 6 7 8 9 10 openGauss=# select int2('1234'); int2 ------ 1234 (1 row) openGauss=# select int2(25.3); int2 ------ 25 (1 row) int4(in) 描述:将传入参数转换为int4类型值并返回。 支持的入参类型包括bit,boolean,char,duoble precision,int16,numeric,real,smallint,text。 返回值类型:int4 示例: 1 2 3 4 5 6 7 8 9 10 openGauss=# select int4('789'); int4 ------ 789 (1 row) openGauss=# select int4(99.9); int4 ------ 99 (1 row) float4(in) 描述:将传入参数转换为float4类型值并返回。支持的入参类型包括:bigint,duoble precision,int16, integer, numeric,smallint,text。 返回值类型:float4 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# select float4('789'); float4 -------- 789 (1 row) openGauss=# select float4(99.9); float4 -------- 99.9 (1 row) float8(in) 描述:将传入参数转换为float8类型值并返回。支持的入参类型包括:bigint,int16, integer, numeric,real,smallint,text。 返回值类型:float8 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# select float8('789'); float8 -------- 789 (1 row) openGauss=# select float8(99.9); float8 -------- 99.9 (1 row) int16(in) 描述:将传入参数转换为int16类型值并返回。支持的入参类型包括:bigint,boolean,double precision,integer,numeric,oid,real,smallint,tinyint。 返回值类型:int16 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# select int16('789'); int16 -------- 789 (1 row) openGauss=# select int16(99.9); int16 -------- 99 (1 row) numeric(in) 描述:将传入参数转换为numeric类型值并返回。支持的入参类型包括:bigint,boolean,double precision,int16,integer,money,real,smallint。 返回值类型:numeric 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# select "numeric"('789'); numeric --------- 789 (1 row) openGauss=# select "numeric"(99.9); numeric --------- 99.9 (1 row) oid(in) 描述:将传入参数转换为oid类型值并返回。支持的入参类型包括:bigint,int16。 返回值类型:oid radians(dp) 描述:把角度转为弧度。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT radians(45.0); radians ------------------ .785398163397448 (1 row) random() 描述:0.0到1.0之间的随机数。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT random(); random ------------------ .824823560658842 (1 row) multiply(x double precision or text, y double precision or text) 描述:x和y的乘积。 返回值类型:double precision 示例: 1 2 3 4 5 6 7 8 9 10 openGauss=# SELECT multiply(9.0, '3.0'); multiply ------------------- 27 (1 row) openGauss=# SELECT multiply('9.0', 3.0); multiply ------------------- 27 (1 row) ln(x) 描述:自然对数。 返回值类型:dp or numeric,不考虑隐式类型转换的情况下与输入相同。 示例: 1 2 3 4 5 openGauss=# SELECT ln(2.0); ln ------------------- .6931471805599453 (1 row) log(x) 描述:以10为底的对数。 返回值类型:与输入相同。 示例: 1 2 3 4 5 openGauss=# SELECT log(100.0); log -------------------- 2.0000000000000000 (1 row) log(b numeric, x numeric) 描述:以b为底的对数。 返回值类型:numeric 示例: 1 2 3 4 5 openGauss=# SELECT log(2.0, 64.0); log -------------------- 6.0000000000000000 (1 row) mod(x,y) 描述:x/y的余数(模)。如果x是0,则返回0。 返回值类型:与参数类型相同。 示例: 1 2 3 4 5 openGauss=# SELECT mod(9,4); mod ----- 1 (1 row) 1 2 3 4 5 openGauss=# SELECT mod(9,0); mod ----- 9 (1 row) pi() 描述:“π”常量。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT pi(); pi ------------------ 3.14159265358979 (1 row) power(a double precision, b double precision) 描述:a的b次幂。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT power(9.0, 3.0); power ---------------------- 729.0000000000000000 (1 row) round(x) 描述:离输入参数最近的整数。 返回值类型:与输入相同。 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# SELECT round(42.4); round ------- 42 (1 row) openGauss=# SELECT round(42.6); round ------- 43 (1 row) round(v numeric, s int) 描述:保留小数点后s位,s后一位进行四舍五入。 返回值类型:numeric 示例: 1 2 3 4 5 openGauss=# SELECT round(42.4382, 2); round ------- 42.44 (1 row) setseed(dp) 描述:为随后的random()调用设置种子(-1.0到1.0之间,包含)。 返回值类型:void 示例: 1 2 3 4 5 openGauss=# SELECT setseed(0.54823); setseed --------- (1 row) sign(x) 描述:输出此参数的符号。 返回值类型:-1表示负数,0表示0,1表示正数。 示例: 1 2 3 4 5 openGauss=# SELECT sign(-8.4); sign ------ -1 (1 row) sin(x) 描述:正弦。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT sin(1.57079); sin ------------------ .999999999979986 (1 row) sqrt(x) 描述:平方根。 返回值类型:dp or numeric,不考虑隐式类型转换的情况下与输入相同。 示例: 1 2 3 4 5 openGauss=# SELECT sqrt(2.0); sqrt ------------------- 1.414213562373095 (1 row) tan(x) 描述:正切。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT tan(20); tan ------------------ 2.23716094422474 (1 row) trunc(x) 描述:截断(取整数部分)。 返回值类型:与输入相同。 示例: 1 2 3 4 5 openGauss=# SELECT trunc(42.8); trunc ------- 42 (1 row) trunc(v numeric, s int) 描述:截断为s位小数。 返回值类型:numeric 示例: 1 2 3 4 5 openGauss=# SELECT trunc(42.4382, 2); trunc ------- 42.43 (1 row) smgrne(a smgr, b smgr) 描述:比较两个smgr类型整数是否不相等。 返回值类型:bool smgreq(a smgr, b smgr) 描述:比较两个smgr类型整数是否相等。 返回值类型:bool int1abs 描述:返回uint8类型数据的绝对值。 参数:tinyint 返回值类型:tinyint int1and 描述:返回两个uint8类型数据按位与的结果。 参数:tinyint, tinyint 返回值类型:tinyint int1cmp 描述:返回两个uint8类型数据比较的结果,若第一个参数大,则返回1;若第二个参数大,则返回-1;若相等,则返回0。 参数:tinyint, tinyint 返回值类型:integer int1div 描述:返回两个uint8类型数据相除的结果,结果为float8类型。 参数:tinyint, tinyint 返回值类型:tinyint int1eq 描述:比较两个uint8类型数据是否相等。 参数:tinyint, tinyint 返回值类型:boolean int1ge 描述:判断两个uint8类型数据是否第一个参数大于等于第二个参数。 参数:tinyint, tinyint 返回值类型:boolean int1gt 描述:无符号1字节整数做大于运算。 参数:tinyint, tinyint 返回值类型:boolean int1larger 描述:无符号1字节整数求最大值。 参数:tinyint, tinyint 返回值类型:tinyint int1le 描述:无符号1字节整数做小于等于运算。 参数:tinyint, tinyint 返回值类型:boolean int1lt 描述:无符号1字节整数做小于运算。 参数:tinyint, tinyint 返回值类型:boolean int1smaller 描述:无符号1字节整数求最小算。 参数:tinyint, tinyint 返回值类型:tinyint int1inc 描述:无符号1字节整数加一。 参数:tinyint 返回值类型:tinyint int1mi 描述:无符号一字节整数做差运算。 参数:tinyint, tinyint 返回值类型:tinyint int1mod 描述:无符号一字节整数做取余运算。 参数:tinyint, tinyint 返回值类型:tinyint int1mul 描述:无符号一字节整数做乘法运算。 参数:tinyint, tinyint 返回值类型:tinyint int1ne 描述:无符号一字节整数不等于运算。 参数:tinyint, tinyint 返回值类型:boolean int1pl 描述:无符号一字节整数加法。 参数:tinyint, tinyint 返回值类型:tinyint int1um 描述:无符号一字节数取相反数并返回有符号二字节整数。 参数:tinyint 返回值类型:smallint int1xor 描述:无符号一字节整数异或操作。 参数:tinyint, tinyint 返回值类型:tinyint cash_div_int1 描述:对money类型进行除法运算。 参数:money, tinyint 返回值类型:money cash_mul_int1 描述:对money类型进行乘法运算。 参数:money, tinyint 返回值类型:money int1not 描述:无符号一字节整数二进制位翻转。 参数:tinyint 返回值类型:tinyint int1or 描述:无符号一字节整数或运算。 参数:tinyint, tinyint 返回值类型:tinyint int1shl 描述:无符号一字节整数左移指定位数。 参数:tinyint, integer 返回值类型:tinyint int1shr 描述:无符号一字节整数右移指定位数。 参数:tinyint, integer 返回值类型:tinyint width_bucket(op numeric, b1 numeric, b2 numeric, count int) 描述:返回一个桶,这个桶是在一个有count个桶,上界为b1下界为b2的等深柱图中operand将被赋予的那个桶。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT width_bucket(5.35, 0.024, 10.06, 5); width_bucket -------------- 3 (1 row) width_bucket(op dp, b1 dp, b2 dp, count int) 描述:返回一个桶,这个桶是在一个有count个桶,上界为b1下界为b2的等深柱图中operand将被赋予的那个桶。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT width_bucket(5.35, 0.024, 10.06, 5); width_bucket -------------- 3 (1 row)
  • 模式匹配操作符 数据库提供了三种独立的实现模式匹配的方法:SQL LIKE操作符、SIMILAR TO操作符和POSIX-风格的正则表达式。除了这些基本的操作符外,还有一些函数可用于提取或替换匹配子串并在匹配位置分离一个串。 LIKE 描述:判断字符串是否能匹配上LIKE后的模式字符串。如果字符串与提供的模式匹配,则LIKE表达式返回为真(NOT LIKE表达式返回假),否则返回为假(NOT LIKE表达式返回真)。 匹配规则: 此操作符只有在它的模式匹配整个串的时候才能成功。如果要匹配在串内任何位置的序列,该模式必须以百分号开头和结尾。 下划线 (_)代表(匹配)任何单个字符; 百分号(%)代表任意串的通配符。 要匹配文本里的下划线或者百分号,在提供的模式里相应字符必须前导逃逸字符。逃逸字符的作用是禁用元字符的特殊含义,缺省的逃逸字符是反斜线,也可以用ESCAPE子句指定一个不同的逃逸字符。 要匹配逃逸字符本身,写两个逃逸字符。例如要写一个包含反斜线的模式常量,那你就要在SQL语句里写两个反斜线。 参数standard_conforming_strings设置为off时,在文串常量中写的任何反斜线都需要被双写。因此,写一个匹配单个反斜线的模式实际上要在语句里写四个反斜线(你可以通过用ESCAPE选择一个不同的逃逸字符来避免这种情况,这样反斜线就不再是LIKE的特殊字符了。但仍然是字符文本分析器的特殊字符,所以你还是需要两个反斜线)。 在兼容MYSQL数据模式时,您也可以通过写ESCAPE ''的方式不选择逃逸字符,这样可以有效地禁用逃逸机制,但是没有办法关闭下划线和百分号在模式中的特殊含义。 关键字ILIKE可以用于替换LIKE,区别是LIKE大小写敏感,ILIKE大小写不敏感。 操作符~~等效于LIKE,操作符~~*等效于ILIKE。 示例: 1 2 3 4 5 openGauss=# SELECT 'abc' LIKE 'abc' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' LIKE 'a%' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' LIKE '_b_' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' LIKE 'c' AS RESULT; result ----------- f (1 row) SIMILAR TO 描述:SIMILAR TO操作符根据自己的模式是否匹配给定串而返回真或者假。他和LIKE非常类似,只不过他使用SQL标准定义的正则表达式理解模式。 匹配规则: 和LIKE一样,此操作符只有在它的模式匹配整个串的时候才能成功。如果要匹配在串内任何位置的序列,该模式必须以百分号开头和结尾。 下划线 (_)代表(匹配)任何单个字符; 百分号(%)代表任意串的通配符。 SIMILAR TO也支持下面这些从POSIX正则表达式借用的模式匹配元字符。 元字符 含义 | 表示选择(两个候选之一) * 表示重复前面的项零次或更多次 + 表示重复前面的项一次或更多次 ? 表示重复前面的项零次或一次 {m} 表示重复前面的项刚好m次 {m,} 表示重复前面的项m次或更多次 {m,n} 表示重复前面的项至少m次并且不超过n次 () 把多个项组合成一个逻辑项 [...] 声明一个字符类,就像POSIX正则表达式一样 前导逃逸字符可以禁止所有这些元字符的特殊含义。逃逸字符的使用规则和LIKE一样。 正则表达式函数: 支持使用函数substring(string from pa...截取匹配SQL正则表达式的子字符串。 示例: 1 2 3 4 5 openGauss=# SELECT 'abc' SIMILAR TO 'abc' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' SIMILAR TO 'a' AS RESULT; result ----------- f (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' SIMILAR TO '%(b|d)%' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' SIMILAR TO '(b|c)%' AS RESULT; result ----------- f (1 row) POSIX正则表达式 描述:正则表达式是一个字符序列,它是定义一个串集合(一个正则集)的缩写。 如果一个串是正则表达式描述的正则集中的一员时, 我们就说这个串匹配该正则表达式。 POSIX正则表达式提供了比LIKE和SIMILAR TO操作符更强大的含义。表1列出了所有可用于POSIX正则表达式模式匹配的操作符。 表1 正则表达式匹配操作符 操作符 描述 例子 ~ 匹配正则表达式,大小写敏感 'thomas' ~ '.*thomas.*' ~* 匹配正则表达式,大小写不敏感 'thomas' ~* '.*Thomas.*' !~ 不匹配正则表达式,大小写敏感 'thomas' !~ '.*Thomas.*' !~* 不匹配正则表达式,大小写不敏感 'thomas' !~* '.*vadim.*' 匹配规则: 与LIKE不同,正则表达式允许匹配串里的任何位置,除非该正则表达式显式地挂接在串的开头或者结尾。 除了上文提到的元字符外, POSIX正则表达式还支持下列模式匹配元字符。 元字符 含义 ^ 表示串开头的匹配 $ 表示串末尾的匹配 . 匹配任意单个字符 正则表达式函数: POSIX正则表达式支持下面函数。 substring(string from pa...函数提供了抽取一个匹配POSIX正则表达式模式的子串的方法。 •regexp_count(string tex...函数提供了获取匹配POSIX正则表达式模式的子串数量的功能。 •regexp_instr(string tex...函数提供了获取匹配POSIX正则表达式模式子串位置的功能。 •regexp_substr(string te...函数提供了抽取一个匹配POSIX正则表达式模式的子串的方法。 regexp_replace(string, p...函数提供了将匹配POSIX正则表达式模式的子串替换为新文本的功能。 regexp_matches(string te...函数返回一个文本数组,该数组由匹配一个POSIX正则表达式模式得到的所有被捕获子串构成。 regexp_split_to_table(st...函数把一个POSIX正则表达式模式当作一个定界符来分离一个串。 regexp_split_to_array(st...和regexp_split_to_table类似,是一个正则表达式分离函数,不过它的结果以一个text数组的形式返回。 正则表达式分离函数会忽略零长度的匹配,这种匹配发生在串的开头或结尾或者正好发生在前一个匹配之后。这和正则表达式匹配的严格定义是相悖的,后者由regexp_matches实现,但是通常前者是实际中最常用的行为。 示例: 1 2 3 4 5 openGauss=# SELECT 'abc' ~ 'Abc' AS RESULT; result -------- f (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' ~* 'Abc' AS RESULT; result -------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' !~ 'Abc' AS RESULT; result -------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc'!~* 'Abc' AS RESULT; result -------- f (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' ~ '^a' AS RESULT; result -------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' ~ '(b|d)'AS RESULT; result -------- t (1 row) 1 2 3 4 5 openGauss=# SELECT 'abc' ~ '^(b|c)'AS RESULT; result -------- f (1 row) 虽然大部分的正则表达式搜索都能很快地执行,但是正则表达式仍可能被人为地弄成需要任意长的时间和任意量的内存进行处理。不建议从非安全模式来源接受正则表达式搜索模式,如果必须这样做,建议加上语句超时限制。使用SIMILAR TO模式的搜索具有同样的安全性危险, 因为SIMILAR TO提供了很多和POSIX-风格正则表达式相同的能力。LIKE搜索比其他两种选项简单得多,因此在接受非安全模式来源搜索时要更安全些。 父主题: 函数和操作符
  • 二进制字符串函数 GaussDB也提供了函数调用所使用的常用语法。 btrim(string bytea,bytes bytea) 描述:从string的开头和结尾删除只包含bytes中字节的最长的字符串。 返回值类型:bytea 示例: 1 2 3 4 5 openGauss=# SELECT btrim(E'\\000trim\\000'::bytea, E'\\000'::bytea) AS RESULT; result ------------ \x7472696d (1 row) get_bit(string, offset) 描述:从字符串中抽取位。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT get_bit(E'Th\\000omas'::bytea, 45) AS RESULT; result -------- 1 (1 row) get_byte(string, offset) 描述:从字符串中抽取字节。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT get_byte(E'Th\\000omas'::bytea, 4) AS RESULT; result -------- 109 (1 row) rawcmp 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:integer raweq 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawge 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawgt 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawin 描述:raw数据类型解析函数。 参数:cstring 返回值类型:bytea rawle 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawlike 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawlt 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawne 描述:比较raw类型是否一样。 参数:raw, raw 返回值类型:boolean rawnlike 描述:比较raw类型与模式是否不匹配。 参数:raw, raw 返回值类型:boolean rawout 描述:RAW类型的输出接口。 参数:bytea 返回值类型:cstring rawsend 描述:转换bytea为二进制类型。 参数:raw 返回值类型:bytea rawtohex 描述:raw格式转换为十六进制。 参数:text 返回值类型:text set_bit(string,offset, newvalue) 描述:设置字符串中的位。 返回值类型:bytea 示例: 1 2 3 4 5 openGauss=# SELECT set_bit(E'Th\\000omas'::bytea, 45, 0) AS RESULT; result ------------------ \x5468006f6d4173 (1 row) set_byte(string,offset, newvalue) 描述:设置字符串中的字节。 返回值类型:bytea 示例: 1 2 3 4 5 openGauss=# SELECT set_byte(E'Th\\000omas'::bytea, 4, 64) AS RESULT; result ------------------ \x5468006f406173 (1 row)
  • 字符串操作符 SQL定义了一些字符串函数,在这些函数里使用关键字而不是逗号来分隔参数。 octet_length(string) 描述:二进制字符串中的字节数。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT octet_length(E'jo\\000se'::bytea) AS RESULT; result -------- 5 (1 row) overlay(string placing string from int [for int]) 描述:替换子串。 返回值类型:bytea 示例: 1 2 3 4 5 openGauss=# SELECT overlay(E'Th\\000omas'::bytea placing E'\\002\\003'::bytea from 2 for 3) AS RESULT; result ---------------- \x5402036d6173 (1 row) position(substring in string) 描述:特定子字符串的位置。 返回值类型:int 示例: 1 2 3 4 5 openGauss=# SELECT position(E'\\000om'::bytea in E'Th\\000omas'::bytea) AS RESULT; result -------- 3 (1 row) substring(string [from int] [for int]) 描述:截取子串。 返回值类型:bytea 示例: 1 2 3 4 5 openGauss=# SELECT substring(E'Th\\000omas'::bytea from 2 for 3) AS RESULT; result ---------- \x68006f (1 row) substr(string, from int [, for int]) 描述:截取子串。 返回值类型:bytea 示例: 1 2 3 4 5 openGauss=# select substr(E'Th\\000omas'::bytea,2, 3) as result; result ---------- \x68006f (1 row) trim([both] bytes from string) 描述:从string的开头和结尾删除只包含bytes中字节的最长字符串。 返回值类型:bytea 示例: 1 2 3 4 5 openGauss=# SELECT trim(E'\\000'::bytea from E'\\000Tom\\000'::bytea) AS RESULT; result ---------- \x546f6d (1 row)
  • 常量与宏 GaussDB支持的常量和宏请参见表1。 表1 常量和宏 参数 描述 示例 CURRENT_CATA LOG 当前数据库 1 2 3 4 5 openGauss=# SELECT CURRENT_CATALOG; current_database ------------------ openGauss (1 row) CURRENT_ROLE 当前用户 1 2 3 4 5 openGauss=# SELECT CURRENT_ROLE; current_user -------------- omm (1 row) CURRENT_SCHEMA 当前数据库模式 1 2 3 4 5 openGauss=# SELECT CURRENT_SCHEMA; current_schema ---------------- public (1 row) CURRENT_USER 当前用户 1 2 3 4 5 openGauss=# SELECT CURRENT_USER; current_user -------------- omm (1 row) LOCALTIMESTAMP 当前会话时间(无时区) 1 2 3 4 5 openGauss=# SELECT LOCALTIMESTAMP; timestamp ---------------------------- 2015-10-10 15:37:30.968538 (1 row) NULL 空值 - SESSION_USER 当前系统用户 1 2 3 4 5 openGauss=# SELECT SESSION_USER; session_user -------------- omm (1 row) SYSDATE 当前系统日期 1 2 3 4 5 openGauss=# SELECT SYSDATE; sysdate --------------------- 2015-10-10 15:48:53 (1 row) USER 当前用户,此用户为CURRENT_USER的别名。 1 2 3 4 5 openGauss=# SELECT USER; current_user -------------- omm (1 row) 父主题: SQL参考
  • aclitem类型 aclitem数据类型是用来存储对象权限信息的,它的内部实现是int类型,支持的格式为‘user1=privs/user2’。 aclitem[]数据类型为aclitem组成的数组,支持的格式为‘{user1=privs1/user3,user2=privs2/user3}’。 其中user1,user2和user3为数据库中已存在的用户/角色名,privs为数据库中支持的权限(参见表1)。 示例: openGauss=# create table table_acl (id int,priv aclitem,privs aclitem[]); -- 新建一张数据表table_acl,有三个字段,类型分别为int,aclitem,aclitem[] openGauss=# insert into table_acl values (1,'user1=arw/omm','{omm=d/user2,omm=w/omm}'); --向数据表table_acl插入一条内容为(1,'user1=arw/omm','{omm=d/user2,omm=w/omm}')的数据 openGauss=# insert into table_acl values (2,'user1=aw/omm','{omm=d/user2}'); --向数据表table_acl再插入一条内容为(2,'user1=aw/omm','{omm=d/user2}')的数据 openGauss=# select * from table_acl; id | priv | privs ----+---------------+------------------------- 1 | user1=arw/omm | {omm=d/user2,omm=w/omm} 2 | user1=aw/omm | {omm=d/user2} (2 rows) 父主题: 数据类型
  • 账本数据库使用的数据类型 账本数据库使用HASH16数据类型来存储行级hash摘要或表级hash摘要,使用HASH32数据类型来存储全局hash摘要或者历史表校验hash(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)。 表1 账本数据库HASH类型 名称 描述 存储空间 范围 HASH16 以无符号64位整数存储。 8字节 0 ~ +18446744073709551615 HASH32 以包含16个的无符号整形元素数的组存储。 16字节 16个元素的无符号整形数组能够包含的取值范围 HASH16数据类型用来在账本数据库中存储行级或表级hash摘要,在获得长度为16个字符串的十六进制字符串的hash序列后,系统将调用hash16in函数将该序列转换为一个无符号64位整数存储进HASH16类型变量中。示例如下: 十六进制字符串:e697da2eaa3a775b 对应的无符号64位整数:16615989244166043483 十六进制字符串:ffffffffffffffff 对应的无符号64位整数:18446744073709551615 HASH32数据类型用来在账本数据库中存储全局hash摘要或者历史表校验hash,在获得长度为32个字符串的十六进制字符串的hash序列后,系统将调用hash32in函数将该序列转换到一个包含16个无符号整形元素的数组中。示例如下: 十六进制字符串:685847ed1fe38e18f6b0e2b18c00edee 对应的HASH32数组:[104,88,71,237,31,227,142,24,246,176,226,177,140,0,237,238] 父主题: 数据类型
共100000条