华为云用户手册

  • percentile_disc(const) within group(order by expression) 描述:返回第一个在排序中位置等于或者超过指定分数的输入值。 输入:const为在0-1之间的数值,expression当前只支持数值类型和interval类型。其中空值不参与计算。 返回类型:对于任何整型数据输入,结果都是NUMERIC类型。否则,与输入数据类型相同。 示例: 1 2 3 4 5 6 7 8 9 10 SELECT percentile_disc(0.3) within group(order by x) FROM (SELECT generate_series(1,5) AS x) AS t; percentile_disc ----------------- 2 (1 row) SELECT percentile_disc(0.3) within group(order by x desc) FROM (SELECT generate_series(1,5) AS x) AS t; percentile_disc ----------------- 4 (1 row)
  • array_agg(expression) 描述:将所有输入值(包括空)连接成一个数组。函数入参不支持数组形式。 返回类型:参数类型的数组。 示例: 创建表employeeinfo,并插入数据: 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE employeeinfo (empno smallint, ename varchar(20), job varchar(20), hiredate date,deptno smallint); INSERT INTO employeeinfo VALUES (7155, 'JACK', 'SALESMAN', '2018-12-01', 30); INSERT INTO employeeinfo VALUES (7003, 'TOM', 'FINANCE', '2016-06-15', 20); INSERT INTO employeeinfo VALUES (7357, 'MAX', 'SALESMAN', '2020-10-01', 30); SELECT * FROM employeeinfo; empno | ename | job | hiredate | deptno -------+-------+----------+---------------------+-------- 7155 | JACK | SALESMAN | 2018-12-01 00:00:00 | 30 7357 | MAX | SALESMAN | 2020-10-01 00:00:00 | 30 7003 | TOM | FINANCE | 2016-06-15 00:00:00 | 20 (3 rows) 查询部门编号为30的所有员工姓名: 1 2 3 4 5 SELECT array_agg(ename) FROM employeeinfo where deptno = 30; array_agg ------------ {JACK,MAX} (1 row) 查询属于同一个部门的所有员工: 1 2 3 4 5 6 7 8 9 10 11 12 13 SELECT deptno, array_agg(ename) FROM employeeinfo group by deptno; deptno | array_agg --------+------------ 30 | {JACK,MAX} 20 | {TOM} (2 rows) SELECT distinct array_agg(ename) OVER (PARTITION BY deptno) FROM employeeinfo; array_agg ------------ {TOM} {JACK,MAX} (2 rows) 查询所有的部门编号且去重: 1 2 3 4 5 6 SELECT array_agg(distinct deptno) FROM employeeinfo group by deptno; array_agg ----------- {20} {30} (2 rows) 查询所有的部门编号去重后按降序排列: 1 2 3 4 5 SELECT array_agg(distinct deptno order by deptno desc) FROM employeeinfo; array_agg ----------- {30,20} (1 row)
  • avg(expression) 描述:所有输入值的均值(算术平均)。 返回类型: 对于任何整数类型输入,结果都是NUMBER类型。 对于任何浮点输入,结果都是DOUBLE PRECISION类型。 其他,和输入数据类型相同。 示例: 1 2 3 4 5 SELECT AVG(inv_quantity_on_hand) FROM tpcds.inventory; avg ---------------------- 500.0387129084044604 (1 row)
  • median(expression) 描述:所有输入值的中位数值。当前只支持数值类型和interval类型。其中空值不参与计算。 返回类型: 对于任何整型数据输入,结果都是NUMERIC类型。否则与输入数据类型相同。 Teradata兼容模式下,如果输入为整型,则返回的数据精度只有整数位。 示例: 1 2 3 4 5 SELECT MEDIAN(inv_quantity_on_hand) FROM tpcds.inventory; median -------- 500 (1 row)
  • percentile_cont(const) within group(order by expression) 描述:返回一个对应于目标列排序中指定分位数的值,如有必要就在相邻的输入项之间插入值。其中空值不参与计算。 输入:const为在0-1之间的数值,expression当前只支持数值类型和interval类型。 返回类型: 对于任何整型数据输入,结果都是NUMERIC类型。否则与输入数据类型相同。 Teradata兼容模式下,如果输入为整型,则返回的数据精度只有整数位。 示例: 1 2 3 4 5 6 7 8 9 10 SELECT percentile_cont(0.3) within group(order by x) FROM (SELECT generate_series(1,5) AS x) AS t; percentile_cont ----------------- 2.2 (1 row) SELECT percentile_cont(0.3) within group(order by x desc) FROM (SELECT generate_series(1,5) AS x) AS t; percentile_cont ----------------- 3.8 (1 row)
  • lastval() 描述:返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。 需要注意的是,这个函数在默认情况下是不支持的,需要通过设置enable_beta_features或者lastval_supported为true之后,才能使用这个函数。同时这种情况下,nextval()函数将不支持下推。 返回类型:bigint 示例: 1 2 3 4 5 SELECT lastval(); lastval --------- 2 (1 row)
  • setval(regclass, bigint, boolean) 描述:设置序列的当前数值以及is_called标志。 返回类型:bigint 示例: 1 2 3 4 5 SELECT setval('seqDemo',1,true); setval -------- 1 (1 row) Setval后当前会话及GTM上会立刻生效,但如果其他会话有缓存的序列值,只能等到缓存值用尽才能感知Setval的作用。所以为了避免序列值冲突,setval要谨慎使用。 因为序列是非事务的,setval造成的改变不会由于事务的回滚而撤销。
  • nextval(regclass) 递增序列并返回新值。 为了避免从同一个序列获取值的并发事务被阻塞, nextval操作不会回滚;也就是说,一旦获取了一个值,它就会被认为已被使用,并且不会再次返回。 即使该操作处于事务中,当事务随后中断,或者调用查询最终没有使用该值,也会出现这种情况。这种情况将在指定值的顺序中留下未使用的“空洞”。 因此, GaussDB (DWS)序列对象不能用于获取“无间隙”序列。 如果nextval被下推到DN上时,各个DN会自动连接GTM,请求next values值,例如(INSERT INTO t1 SELECT xxx,t1某一列需要调用nextval函数),由于GTM上有最大连接数为8192的限制,而这类下推语句会导致消耗过多的GTM连接数,因此对于这类语句的并发数目限制为7000(其它语句需要占用部分连接)/集群DN数目。 返回类型:bigint nextval函数有两种调用方式(其中第二种调用方式兼容Oracle的语法,目前不支持Sequence命名中有特殊字符"."的情况),如下: 示例1: 1 2 3 4 5 SELECT nextval('seqDemo'); nextval --------- 2 (1 row) 示例2: 1 2 3 4 5 SELECT seqDemo.nextval; nextval --------- 2 (1 row)
  • currval(regclass) 返回当前会话里最近一次nextval返回的指定的sequence的数值。如果当前会话还没有调用过指定的sequence的nextval,那么调用currval将会报错。需要注意的是,这个函数在默认情况下是不支持的,需要通过设置enable_beta_features为true之后,才能使用这个函数。同时在设置enable_beta_features为true之后,nextval()函数将不支持下推。 返回类型:bigint currval函数有两种调用方式(其中第二种调用方式兼容Oracle的语法,目前不支持Sequence命名中有特殊字符"."的情况),如下: 示例1: 1 2 3 4 5 SELECT currval('seq1'); currval --------- 2 (1 row) 示例2: 1 2 3 4 5 SELECT seq1.currval seq1; currval --------- 2 (1 row)
  • UUID函数应用示例 UUID全局唯一的特点,可以作为数据表生成主键,也可以作为数据表的分布列,uuid_generate_v1()作为数据表分布列的默认值时,通过Hash分布可以将数据均匀分布到各个DN上,防止数据倾斜。 UUID的显著优点就是全局唯一,不需要中心节点,单个节点独立生成。但是也存在缺点,UUID较INT占用更多的存储空间,索引效率低,生成的ID随机,没有递增的特性,所以辨识困难。因此,在应用中,要根据实际情况选择UUID还是Sequence作为数据表主键。 示例如下: INT类型作为分布列。 创建示例哈希表mytable01,int类型作为分布列,插入数据后,查询数据存在数据倾斜。 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 28 29 CREATE TABLE mytable01(a INT, b INT) DISTRIBUTE BY hash(a); CREATE TABLE INSERT INTO mytable01 VALUES(1, 10); INSERT 0 1 INSERT INTO mytable01 VALUES(1, 10); INSERT 0 1 INSERT INTO mytable01 VALUES(1, 10); INSERT 0 1 INSERT INTO mytable01 VALUES(1, 10); INSERT 0 1 INSERT INTO mytable01 VALUES(1, 10); INSERT 0 1 SELECT * FROM mytable01; a | b ---+---- 1 | 10 1 | 10 1 | 10 1 | 10 1 | 10 (5 rows) SELECT table_skewness('mytable01'); table_skewness ------------------------------------- ("dn_6003_6004 ",5,100.000%) ("dn_6001_6002 ",0,0.000%) ("dn_6005_6006 ",0,0.000%) (3 rows) UUID类型作为分布列。 创建示例哈希表mytable02,UUID类型作为分布列,插入数据后,查询数据分布正常。 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 28 29 30 31 CREATE TABLE mytable02 (id UUID default uuid_generate_v1(), a INT, b INT) DISTRIBUTE BY hash(id); CREATE TABLE INSERT INTO mytable02(a, b) VALUES(1, 10); INSERT 0 1 INSERT INTO mytable02(a, b) VALUES(1, 10); INSERT 0 1 INSERT INTO mytable02(a, b) VALUES(1, 10); INSERT 0 1 INSERT INTO mytable02(a, b) VALUES(1, 10); INSERT 0 1 INSERT INTO mytable02(a, b) VALUES(1, 10); INSERT 0 1 SELECT * FROM mytable02; id | a | b --------------------------------------+---+---- 63e45c14-cc74-0e00-e9aa-0a2c3fa0fffe | 1 | 10 63e45c1f-4d18-0700-e9ab-0a2c3fa0fffe | 1 | 10 63e45c26-f859-0b00-e9ad-0a2c3fa0fffe | 1 | 10 63e45c23-9e5d-0300-e9ac-0a2c3fa0fffe | 1 | 10 63e45c2a-5825-0600-e9ae-0a2c3fa0fffe | 1 | 10 (5 rows) SELECT table_skewness('mytable02'); table_skewness ------------------------------------ ("dn_6001_6002 ",3,60.000%) ("dn_6003_6004 ",2,40.000%) ("dn_6005_6006 ",0,0.000%) (3 rows)
  • uuid() 描述:生成一个UUID类型的序列号。此函数为MySQL兼容性函数,仅8.2.0及以上集群版本支持。 返回类型:UUID 示例: 1 2 3 4 5 SELECT uuid(); uuid ---------------------------------- 6327dc96-f0e7-0100-f2f2-6c9ff700fffe (1 row) uuid函数内部生成原理同uuid_generate_v1()函数,即根据时间信息、集群节点编号和生成该序列的线程号生成UUID,该UUID在单个集群内是全局唯一的,但在多个集群间的时间信息、集群节点编号、线程号和时钟序列仍然存在同时相等的可能性,因此多个集群间生成的UUID仍然存在极低概率的重复风险。
  • uuid_generate_v1() 描述:生成一个UUID类型的序列号。 返回类型:UUID 示例: 1 2 3 4 5 SELECT uuid_generate_v1(); uuid_generate_v1 -------------------------------------- c71ceaca-a175-11e9-a920-797ff7000001 (1 row) uuid_generate_v1函数根据时间信息、集群节点编号和生成该序列的线程号生成UUID,该UUID在单个集群内是全局唯一的,但在多个集群间的时间信息、集群节点编号、线程号和时钟序列仍然存在同时相等的可能性,因此多个集群间生成的UUID仍然存在极低概率的重复风险。
  • sys_guid() 描述:生成Oracle的GUID序列号,类似UUID。此函数为Oracle兼容性函数。 返回类型:text 示例: 1 2 3 4 5 SELECT sys_guid(); sys_guid ---------------------------------- 4EBD3C74A17A11E9A1BF797FF7000001 (1 row) sys_guid函数内部生成原理同uuid_generate_v1函数。
  • try_cast(x as type) 描述:将x转换成给定的type类型值,若转换失败且当前类型转换为GaussDB(DWS)允许的转换,则返回NULL,否则报错。该函数仅8.2.0及以上集群版本支持。 示例: 1 2 3 4 5 6 7 8 9 10 SELECT cast('a' as int4); int4 --------------- (1 row) SELECT cast('22-oct-1997', timestamp); timestamp --------------------- 1997-10-22 00:00:00 (1 row)
  • to_clob(char/nchar/varchar/nvarchar/varchar2/nvarchar2/text/raw) 描述:将RAW类型或者文本字符集类型CHAR、NCHAR、VARCHAR、VARCHAR2、NVARCHAR2、TEXT转成CLOB类型。 返回值类型:clob 示例: 1 2 3 4 5 SELECT to_clob('ABCDEF'::RAW(10)); to_clob --------- ABCDEF (1 row) 1 2 3 4 5 SELECT to_clob('hello111'::CHAR(15)); to_clob ---------- hello111 (1 row) 1 2 3 4 5 SELECT to_clob('gauss123'::NCHAR(10)); to_clob ---------- gauss123 (1 row) 1 2 3 4 5 SELECT to_clob('gauss234'::VARCHAR(10)); to_clob ---------- gauss234 (1 row) 1 2 3 4 5 SELECT to_clob('gauss345'::VARCHAR2(10)); to_clob ---------- gauss345 (1 row) 1 2 3 4 5 SELECT to_clob('gauss456'::NVARCHAR2(10)); to_clob ---------- gauss456 (1 row) 1 2 3 4 5 SELECT to_clob('World222!'::TEXT); to_clob ----------- World222! (1 row)
  • to_char (integer/number[, fmt]) 描述:将一个整型或者浮点类型的值转换为指定格式的字符串。 可选参数fmt可以为以下几类:十进制字符、“分组”符、正负号和货币符号,每类都可以有不同的模板,模板之间可以合理组合,常见的模板有:9、0、,(千分隔符)、.(小数点),可参考表1。 模板可以有类似FM的修饰词,但FM不抑制由模板0指定而输出的0。 要将整型类型的值转换成对应16进制值的字符串,使用模板“x”或“X”。 返回值类型:varchar 示例: 1 2 3 4 5 SELECT to_char(1485,'9,999'); to_char --------- 1,485 (1 row) 1 2 3 4 5 SELECT to_char( 1148.5,'9,999.999'); to_char ------------ 1,148.500 (1 row) 1 2 3 4 5 SELECT to_char(148.5,'990999.909'); to_char ------------- 0148.500 (1 row) 1 2 3 4 5 SELECT to_char(123,'XXX'); to_char --------- 7B (1 row)
  • to_number ( expr [, fmt]) 描述:将expr按指定格式转换为一个NUMBER类型的值。 类型转换格式请参考表1。 转换十六进制字符串为十进制数字时,最多支持16个字节的十六进制字符串转换为无符号数。 转换十六进制字符串为十进制数字时,格式字符串中不允许出现除'x'或'X'以外的其他字符,否则报错。 返回值类型:number 示例: 1 2 3 4 5 SELECT to_number('12,454.8-', '99G999D9S'); to_number ----------- -12454.8 (1 row)
  • to_timestamp(double precision) 描述:把UNIX纪元转换成时间戳。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 SELECT to_timestamp(1284352323); to_timestamp ------------------------ 2010-09-13 12:32:03+08 (1 row)
  • to_date(string, fmt) 描述:将字符串string按fmt指定格式转化为DATE类型的值。fmt格式可参考表2。 该函数不能直接支持CLOB类型,但是CLOB类型的参数能够通过隐式转换实现。 返回值类型:date 示例: 1 2 3 4 5 SELECT TO_DATE('05 Dec 2010','DD Mon YYYY'); to_date --------------------- 2010-12-05 00:00:00 (1 row)
  • to_char (datetime/interval [, fmt]) 描述:将一个DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE或者TIMESTAMP WITH LOCAL TIME ZONE类型的DATETIME或者INTERVAL值按照fmt指定的格式转换为VARCHAR类型。 可选参数fmt可以为以下几类:日期、时间、星期、季度和世纪。每类都可以有不同的模板,模板之间可以合理组合,常见的模板有:HH、MI、SS、YYYY、MM、DD,可参考表2。 模板可以有修饰词,常用的修饰词是FM,可以用来抑制前导的零或尾随的空白。 返回值类型:varchar 示例: 1 2 3 4 5 SELECT to_char(current_timestamp,'HH12:MI:SS'); to_char ---------- 10:19:26 (1 row) 1 2 3 4 5 SELECT to_char(current_timestamp,'FMHH12:FMMI:FMSS'); to_char ---------- 10:19:46 (1 row)
  • POSIX正则表达式 正则表达式是一个字符序列,它是定义一个串集合 (一个正则集)的缩写。 如果一个串是正则表达式描述的正则集中的一员时, 那么就说这个串匹配该正则表达式。 POSIX正则表达式提供了比LIKE和SIMILAR TO操作符更强大的含义。表2列出了所有可用于POSIX正则表达式模式匹配的操作符。 表2 正则表达式匹配操作符 操作符 描述 例子 ~ 匹配正则表达式,大小写敏感 'thomas' ~ '.*thomas.*' ~* 匹配正则表达式,大小写不敏感 'thomas' ~* '.*Thomas.*' !~ 不匹配正则表达式,大小写敏感 'thomas' !~ '.*Thomas.*' !~* 不匹配正则表达式,大小写不敏感 'thomas' !~* '.*vadim.*' 匹配规则 与LIKE不同,正则表达式允许匹配串里的任何位置,除非该正则表达式显式地挂接在串的开头或者结尾。 除了上文提到的元字符外, POSIX正则表达式还支持下表的模式匹配元字符。 表3 模式匹配元字符 元字符 含义 ^ 表示串开头的匹配。 $ 表示串末尾的匹配。 . 匹配任意单个字符。 正则表达式函数 POSIX正则表达式支持下面函数。 substring(string from pattern)函数提供了抽取一个匹配POSIX正则表达式模式的子串的方法。 regexp_replace(string, pattern, replacement [,flags ])函数提供了将匹配POSIX正则表达式模式的子串替换为新文本的功能。 regexp_matches(string text, pattern text [, flags text])函数返回一个文本数组,该数组由匹配一个POSIX正则表达式模式得到的所有被捕获子串构成。 regexp_split_to_table(string text, pattern text [, flags text])函数把一个POSIX正则表达式模式当作一个定界符来分离一个串。 regexp_split_to_array(string text, pattern text [, flags text ])和regexp_split_to_table类似,是一个正则表达式分离函数,不过它的结果以一个text数组的形式返回。 正则表达式分离函数会忽略零长度的匹配,这种匹配发生在串的开头或结尾或者正好发生在前一个匹配之后。这和正则表达式匹配的严格定义是相悖的,后者由regexp_matches实现,但是通常前者是实际中最常用的行为。 示例 1 2 3 4 5 SELECT 'abc' ~ 'Abc' AS RESULT; result -------- f (1 row) 1 2 3 4 5 SELECT 'abc' ~* 'Abc' AS RESULT; result -------- t (1 row) 1 2 3 4 5 SELECT 'abc' !~ 'Abc' AS RESULT; result -------- t (1 row) 1 2 3 4 5 SELECT 'abc'!~* 'Abc' AS RESULT; result -------- f (1 row) 1 2 3 4 5 SELECT 'abc' ~ '^a' AS RESULT; result -------- t (1 row) 1 2 3 4 5 SELECT 'abc' ~ '(b|d)'AS RESULT; result -------- t (1 row) 1 2 3 4 5 SELECT 'abc' ~ '^(b|c)'AS RESULT; result -------- f (1 row) 虽然大部分的正则表达式搜索都能很快地执行,但是正则表达式仍可能被人为地控制,通过任意长的时间和任意量的内存进行处理。不建议从非安全模式来源接受正则表达式搜索模式,如果必须这样做,建议加上语句超时限制。使用SIMILAR TO模式的搜索具有同样的安全性危险, 因为SIMILAR TO提供了很多和POSIX-风格正则表达式相同的能力。LIKE搜索比其他两种选项简单得多,因此在接受非安全模式来源搜索时要更安全些。
  • LIKE 判断字符串是否能匹配上LIKE后的模式字符串。如果字符串与提供的模式匹配,则LIKE表达式返回为真(NOT LIKE表达式返回假),否则返回为假(NOT LIKE表达式返回真)。 匹配规则 此操作符只有在它的模式匹配整个串的时候才能成功。如果要匹配在串内任何位置的序列,该模式必须以百分号开头和结尾。 下划线 (_)代表(匹配)任何单个字符; 百分号(%)代表任意串的通配符。 要匹配文本里的下划线(_)或者百分号(%),在提供的模式里相应字符必须前导逃逸字符。逃逸字符的作用是禁用元字符的特殊含义,缺省的逃逸字符是反斜线,也可以用ESCAPE子句指定一个不同的逃逸字符。 要匹配逃逸字符本身,需写两个逃逸字符。例如要写一个包含反斜线的模式常量,那就要在SQL语句里写两个反斜线。 参数standard_conforming_strings设置为off时,在文串常量中写的任何反斜线都需要被双写。因此写一个匹配单个反斜线的模式实际上要在语句里写四个反斜线。可通过用ESCAPE选择一个不同的逃逸字符来避免这种情况,这样反斜线就不再是LIKE的特殊字符了。但仍然是字符文本分析器的特殊字符,所以还是需要两个反斜线。也可通过写ESCAPE ''的方式不选择逃逸字符,这样可以有效地禁用逃逸机制,但是没有办法关闭下划线和百分号在模式中的特殊含义。 关键字ILIKE可以用于替换LIKE,区别是LIKE大小写敏感,ILIKE大小写不敏感。 操作符~~等效于LIKE,操作符~~*等效于ILIKE。 示例 1 2 3 4 5 SELECT 'abc' LIKE 'abc' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 SELECT 'abc' LIKE 'a%' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 SELECT 'abc' LIKE '_b_' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 SELECT 'abc' LIKE 'c' AS RESULT; result ----------- f (1 row)
  • SIMILAR TO SIMILAR TO操作符根据自己的模式判断是否匹配给定串而返回真或者假。它和LIKE非常类似,只不过它使用SQL标准定义的正则表达式理解模式。 匹配规则 和LIKE一样,SIMILAR TO操作符只有在它的模式匹配整个串的时候才返回真。如果要匹配在串内任何位置的序列,该模式必须以百分号开头和结尾。 下划线 (_)代表(匹配)任何单个字符; 百分号(%)代表任意串的通配符。 SIMILAR TO也支持下面这些从POSIX正则表达式借用的模式匹配元字符。 表1 模式匹配元字符 元字符 含义 | 表示选择(两个候选之一)。 * 表示重复前面的项零次或更多次。 + 表示重复前面的项一次或更多次。 ? 表示重复前面的项零次或一次。 {m} 表示重复前面的项刚好m次。 {m,} 表示重复前面的项m次或更多次。 {m,n} 表示重复前面的项至少m次并且不超过n次。 () 把多个项组合成一个逻辑项。 [...] 声明一个字符类,就像POSIX正则表达式一样。 前导逃逸字符可以禁止所有这些元字符的特殊含义。逃逸字符的使用规则和LIKE一样。 注意事项 如果SIMILAR TO正则表达式重复匹配字符数量非常庞大,由于受递归大小限制,执行语句会失败并报错invalid regular expression: regular expression is too complex,可尝试调大GUC参数max_stack_depth。 正则表达式函数 支持使用函数substring(string from pattern for escape)截取匹配SQL正则表达式的子字符串。 示例 1 2 3 4 5 SELECT 'abc' SIMILAR TO 'abc' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 SELECT 'abc' SIMILAR TO 'a' AS RESULT; result ----------- f (1 row) 1 2 3 4 5 SELECT 'abc' SIMILAR TO '%(b|d)%' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 SELECT 'abc' SIMILAR TO '(b|c)%' AS RESULT; result ----------- f (1 row)
  • trim([both] bytes from string) 描述:从string的开头和结尾删除只包含bytes中字节的最长字符串。 返回值类型:bytea 示例: 1 2 3 4 5 SELECT trim(E'\\000'::bytea from E'\\000Tom\\000'::bytea) AS RESULT; result ---------- \x546f6d (1 row)
  • btrim(string bytea,bytes bytea) 描述:从string的开头和结尾删除只包含bytes中字节的最长的字符串。 返回值类型:bytea 示例: 1 2 3 4 5 SELECT btrim(E'\\000trim\\000'::bytea, E'\\000'::bytea) AS RESULT; result ------------ \x7472696d (1 row)
  • substring_index(string, delim, count) 描述:按照区分大小写匹配查找delimiter分隔符,返回string字符串中第count次出现delim分隔符之前的子串。若count为负数,则从末尾向前查找delim分隔符。若参数含有NULL值,返回NULL。该函数仅8.2.0及以上集群版本支持。 返回值类型:text 示例:按照区分大小写匹配查找delimiter分隔符".wWw.",返回string字符串"www.wWw.cloud.wWw.com"中第2次出现delimiter分隔符之前的子串"www.wWw.cloud"。 1 2 3 4 5 SELECT SUBSTRING_INDEX('www.wWw.cloud.wWw.com', '.wWw.', 2) AS RESULT; result --------------- www.wWw.cloud (1 row)
  • substring(string [from int] [for int]) 描述:截取子串。 返回值类型:bytea 示例: 1 2 3 4 5 SELECT substring(E'Th\\000omas'::bytea from 2 for 3) AS RESULT; result ---------- \x68006f (1 row) 截取时间,获取小时数: 1 2 3 4 5 SELECT substring('2022-07-18 24:38:15',12,2)AS RESULT; result ----------- 24 (1 row)
  • overlay(string placing string from int [for int]) 描述:替换子串。 返回值类型:bytea 示例: 1 2 3 4 5 SELECT overlay(E'Th\\000omas'::bytea placing E'\\002\\003'::bytea from 2 for 3) AS RESULT; result ---------------- \x5402036d6173 (1 row)
  • decode(string text, format text) 描述:将二进制数据从文本数据中解码。 返回值类型:bytea 示例: 1 2 3 4 5 6 7 8 9 10 11 SELECT decode('ZGF0YWJhc2U=', 'base64'); decode -------------- \x6461746162617365 (1 row) SELECT convert_from('\x6461746162617365','utf-8'); convert_from -------------- database (1 row)
  • CONV(n, fromBase, toBase) 描述: 将给定的数值或者字符串转换成目标进制,并按照字符串的形式输出结果。若参数含有NULL值,返回NULL。进制表示范围为[-36, -2]&[2, 36]。 返回值类型:text 示例: 1 2 3 4 5 SELECT CONV(-1, 10, 16) as result; result ------------------ FFFFFFFFFFFFFFFF (1 row)
共100000条