华为云用户手册

  • substr(string,from,count) 描述: 从参数string中抽取子字符串。 from表示抽取的起始位置。 count表示抽取的子字符串长度。 from为0时,按1处理。 from为正数时,抽取从from开始的count个字符。 from为负数时,抽取从倒数第n个开始的count个字符,n为from的绝对值。 count小于1时,返回null。 返回值类型:varchar 示例: from为正数时: 1 2 3 4 5 SELECT substr('ABCDEF',2,2); substr -------- BC (1 row) from为负数时: 1 2 3 4 5 SELECT substr('ABCDEF',-3,2); substr -------- DE (1 row)
  • rpad(string varchar, length int [, fill varchar]) 描述:使用填充字符fill(缺省时为空白),把string填充到length长度。如果string已经比length长则将其从尾部截断。 length参数在GaussDB(DWS)中表示字符长度。一个汉字长度计算为一个字符。 返回值类型:varchar 示例: 1 2 3 4 5 SELECT rpad('hi',5,'xyza'); rpad ------- hixyz (1 row) 1 2 3 4 5 SELECT rpad('hi',5,'abcdefg'); rpad ------- hiabc (1 row)
  • substring(string from pattern) 描述:截取匹配POSIX正则表达式的子字符串。如果没有匹配它返回空值,否则返回文本中匹配模式的那部分。 返回值类型:text 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 SELECT substring('Thomas' from '...$'); substring ----------- mas (1 row) SELECT substring('foobar' from 'o(.)b'); result -------- o (1 row) SELECT substring('foobar' from '(o(.)b)'); result -------- oob (1 row) 如果POSIX正则表达式模式包含任何圆括号,那么将返回匹配第一对子表达式(对应第一个左圆括号的) 的文本。如果想在表达式里使用圆括号而又不想导致这个例外,那么可以在整个表达式外边加上一对圆括号。
  • regexp_split_to_table(string text, pattern text [, flags text]) 描述:用POSIX正则表达式作为分隔符,分隔string。如果没有与pattern的匹配,该函数返回string。如果有至少有一个匹配,对每一个匹配它都返回从上一个匹配的末尾(或者串的开头)到这次匹配开头之间的文本。当没有更多匹配时,它返回从上一次匹配的末尾到串末尾之间的文本。 flags参数包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。 返回值类型:setof text 示例: 1 2 3 4 5 6 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 9 10 11 12 13 14 15 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 示例: 1 2 3 4 5 SELECT regexp_substr('500 Hello World, Redwood Shores, CA', ',[^,]+,') "REGEXPR_SUBSTR"; REGEXPR_SUBSTR ------------------- , Redwood Shores, (1 row)
  • regexp_split_to_array(string text, pattern text [, flags text ]) 描述:用POSIX正则表达式作为分隔符,分隔string。和regexp_split_to_table相同,不过regexp_split_to_array会把它的结果以一个text数组的形式返回。 返回值类型:text[] 示例: 1 2 3 4 5 SELECT regexp_split_to_array('hello world', E'\\s+'); regexp_split_to_array ----------------------- {hello,world} (1 row)
  • replace(string text, from text, to text) 描述:把字符串string里出现地所有子字符串from的内容替换成子字符串to的内容。 返回值类型:text 示例: 1 2 3 4 5 SELECT replace('abcdefabcdef', 'cd', 'XXX'); replace ---------------- abXXXefabXXXef (1 row)
  • right(str text, n int) 描述:返回字符串中的后n个字符。 ORA和TD兼容模式下,当n是负数时,返回除前|n|个字符以外的所有字符。 MySQL兼容模式下,当n是负数时,返回空串。 返回值类型:text 示例: 1 2 3 4 5 6 7 8 9 10 11 SELECT right('abcde', 2); right ------- de (1 row) SELECT right('abcde', -2); right ------- cde (1 row)
  • replace(string varchar, search_string varchar, replacement_string varchar) 描述:把字符串string中所有子字符串search_string替换成子字符串replacement_string。 返回值类型:varchar 示例: 1 2 3 4 5 SELECT replace('jack and jue','j','bl'); replace ---------------- black and blue (1 row)
  • regexp_replace(string, pattern, replacement [,flags ]) 描述:替换匹配POSIX正则表达式的子字符串。 如果没有匹配pattern,那么返回不加修改的string串。 如果有匹配,则返回的string串里面的匹配子串将被replacement串替换掉。 replacement串可以包含\n, 其中\n是1到9, 表明string串里匹配模式里第n个圆括号子表达式的子串应该被插入, 并且它可以包含\&表示应该插入匹配整个模式的子串。 可选的flags参数包含零个或多个改变函数行为的单字母标记,见下表。 表1 flags参数的可选项 选项 描述 g 表示替换每一个匹配的子字符串而不仅仅是第一个(默认仅替换第一个匹配的子字符串)。 B 默认情况下使用Henry Spencer正则库及其正则语法。指定B选项后,表示优先选用boost regex正则库及其正则语法。 以下两种情况在指定了B选项时,也会自动转换为选择Henry Spencer正则库及其正则语法: flags同时指定了p、q、w、x中的任意个字符。 string或pattern参数中含有多字节字符。 b 表示按照BRE(POSIX Basic Regular Expression)匹配模式的规则进行匹配。 c 大小写敏感匹配。 e 表示按照ERE(POSIX Extended Regular Expression)匹配模式的规则进行匹配。当b和e都未指定时,如果选用的是Henry Spencer正则库,则按照ARE(Advanced Regular Expression,类似于Perl Regular Expression)匹配模式的规则进行匹配;如果选用的是boost regex正则库,则按照Perl Regular Expression匹配模式的规则进行匹配。 i 大小写不敏感匹配。 m 换行敏感匹配,与选项n同义。 n 换行敏感匹配。此选项生效时,换行符影响元字符(.、^、$和[^)的匹配。 p 部分换行敏感匹配,此选项生效时,换行符影响元字符(.和[^)的匹配。部分是相对选项n而言。 q 重置正则表达式为加双引号的文本字符串,所有都是普通字符。 s 非换行敏感匹配。 t 紧凑语法(缺省)。该选项生效时,所有字符都很重要。 w 反部分换行敏感匹配,此选项生效时,换行符影响元字符(^和$)的匹配。部分是相对选项n而言。 x 扩展语法。与紧凑语法相对,在扩展的语法中,正则表达式中的空白字符被忽略。空白字符包括空格、水平制表符、新行、和任何属于space字符表的字符。 返回值类型:varchar 示例: 1 2 3 4 5 6 7 8 9 10 SELECT regexp_replace('Thomas', '.[mN]a.', 'M'); regexp_replace ---------------- ThM (1 row) SELECT regexp_replace('foobarbaz','b(..)', E'X\\1Y', 'g') AS RESULT; result ------------- fooXarYXazY (1 row)
  • regexp_matches(string text, pattern text [, flags text]) 描述:返回string中所有匹配POSIX正则表达式的子字符串。如果pattern不匹配,该函数不返回行。如果模式不包含圆括号子表达式,则每一个被返回的行都是一个单一元素的文本数组,其中包括匹配整个模式的子串。如果模式包含圆括号子表达式,该函数返回一个文本数组,它的第n个元素是匹配模式的第n个圆括号子表达式的子串。 flags参数为可选参数,包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。 如果提供了最后一个参数,但参数值是空字符串(''),且数据库SQL兼容模式设置为ORA的情况下,会导致返回结果为空集。这是因为ORA兼容模式将''作为NULL处理,避免此类行为的方式有如下几种: 将数据库SQL兼容模式改为TD; 不提供最后一个参数,或最后一个参数不为空字符串。 返回值类型:setof text[] 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 SELECT regexp_matches('foobarbequebaz', '(bar)(beque)'); regexp_matches ---------------- {bar,beque} (1 row) SELECT regexp_matches('foobarbequebaz', 'barbeque'); regexp_matches ---------------- {barbeque} (1 row) SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g'); result -------------- {bar,beque} {bazil,barf} (2 rows) 如果没有子查询,当regexp_matches函数没有匹配上时,不会输出表中的数据。这通常不是所需的返回结果,应避免这种写法,建议可使用regexp_substr函数来实现相同的功能。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 SELECT * FROM tab; c1 | c2 -----+----- dws | dws (1 row) SELECT c1, regexp_matches(c2, '(bar)(beque)') FROM tab; c1 | regexp_matches ----+---------------- (0 rows) SELECT c1, c2, (SELECT regexp_matches(c2, '(bar)(beque)')) FROM tab; c1 | c2 | regexp_matches -----+-----+---------------- dws | dws | (1 row)
  • regexp_like(source_string, pattern [, match_parameter]) 描述:正则表达式的模式匹配函数。 source_string为源字符串,pattern为正则表达式匹配模式。 match_parameter为匹配选项,可取值为: 'i':大小写不敏感。 'c':大小写敏感。 'n':允许正则表达式元字符“.”匹配换行符。 'm':将source_string视为多行。 若忽略match_parameter选项,默认为大小写敏感,“.”不匹配换行符,source_string视为单行。 返回值类型:boolean 示例: 1 2 3 4 5 SELECT regexp_like('ABC', '[A-Z]'); regexp_like ------------- t (1 row) 1 2 3 4 5 SELECT regexp_like('ABC', '[D-Z]'); regexp_like ------------- f (1 row) 1 2 3 4 5 SELECT regexp_like('abc', '[A-Z]','i'); regexp_like ------------- t (1 row) 1 2 3 4 5 SELECT regexp_like('abc', '[A-Z]'); regexp_like ------------- f (1 row)
  • quote_literal(string text) 描述:返回适用于在SQL语句里当作文本使用的形式(使用适当的引号进行界定)。 返回值类型:text 示例: 1 2 3 4 5 SELECT quote_literal('hello'); quote_literal --------------- 'hello' (1 row) 如果出现如下写法,text文本将进行转义。 1 2 3 4 5 SELECT quote_literal(E'O\'hello'); quote_literal --------------- 'O''hello' (1 row) 如果出现如下写法,反斜杠会写入两次。 1 2 3 4 5 SELECT quote_literal('O\hello'); quote_literal --------------- E'O\\hello' (1 row) 如果参数为NULL,返回空。如果参数可能为null,通常使用函数quote_nullable更适用。 1 2 3 4 5 SELECT quote_literal(NULL); quote_literal --------------- (1 row)
  • quote_literal(value anyelement) 描述:将给定的值强制转换为text,加上引号作为文本。 返回值类型:text 示例: 1 2 3 4 5 SELECT quote_literal(42.5); quote_literal --------------- '42.5' (1 row) 如果出现如下写法,定值将进行转义。 1 2 3 4 5 SELECT quote_literal(E'O\'42.5'); quote_literal --------------- '0''42.5' (1 row) 如果出现如下写法,反斜杠会写入两次。 1 2 3 4 5 SELECT quote_literal('O\42.5'); quote_literal --------------- E'O\\42.5' (1 row)
  • quote_nullable(value anyelement) 描述:将给定的参数值转化为text,加上引号作为文本。 返回值类型:text 示例: 1 2 3 4 5 SELECT quote_nullable(42.5); quote_nullable ---------------- '42.5' (1 row) 如果出现如下写法,定值将进行转义。 1 2 3 4 5 SELECT quote_nullable(E'O\'42.5'); quote_nullable ---------------- 'O''42.5' (1 row) 如果出现如下写法,反斜杠会写入两次。 1 2 3 4 5 SELECT quote_nullable('O\42.5'); quote_nullable ---------------- E'O\\42.5' (1 row) 如果参数为NULL,返回NULL。 1 2 3 4 5 SELECT quote_nullable(NULL); quote_nullable ---------------- NULL (1 row)
  • quote_ident(string text) 描述:返回适用于SQL语句的标识符形式(使用适当的引号进行界定)。只有在必要的时候才会添加引号(字符串包含非标识符字符或者会转换大小写的字符)。返回值中嵌入的引号会被双写。 返回值类型:text 示例: 1 2 3 4 5 SELECT quote_ident('hello world'); quote_ident -------------- "hello world" (1 row)
  • quote_nullable(string text) 描述:返回适用于在SQL语句里当作字符串使用的形式(使用适当的引号进行界定)。 返回值类型:text 示例: 1 2 3 4 5 SELECT quote_nullable('hello'); quote_nullable ---------------- 'hello' (1 row) 如果出现如下写法,text文本将进行转义。 1 2 3 4 5 SELECT quote_nullable(E'O\'hello'); quote_nullable ---------------- 'O''hello' (1 row) 如果出现如下写法,反斜杠会写入两次。 1 2 3 4 5 SELECT quote_nullable('O\hello'); quote_nullable ---------------- E'O\\hello' (1 row) 如果参数为NULL,返回NULL。 1 2 3 4 5 SELECT quote_nullable(NULL); quote_nullable ---------------- NULL (1 row)
  • convert_from(string bytea, src_encoding name) 描述:以数据库的编码方式转化字符串bytea。 src_encoding指定源编码方式,在该编码下,string必须是合法的。 返回值类型:text 示例: 1 2 3 4 5 6 7 8 9 10 SELECT convert_from('text_in_utf8', 'UTF8'); convert_from -------------- text_in_utf8 (1 row) SELECT convert_from('\x6461746162617365','gbk'); convert_from -------------- database (1 row)
  • convert_to(string text, dest_encoding name) 描述:将字符串转化为dest_encoding的编码格式。 返回值类型:bytea 示例: 1 2 3 4 5 6 7 8 9 10 SELECT convert_to('some text', 'UTF8'); convert_to ---------------------- \x736f6d652074657874 (1 row) SELECT convert_to('database', 'gbk'); convert_to -------------------- \x6461746162617365 (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)
  • instr(string,substring[,position,occurrence]) 描述:从字符串string的position(缺省时为1)所指的位置开始查找并返回第occurrence(缺省时为1)次出现子串substring的位置的值。 当position为0时,返回0。 当position为负数时,从字符串倒数第n个字符往前逆向搜索。n为position的绝对值。 本函数以字符为计算单位,如一个汉字为一个字符。 返回值类型:integer 示例: 1 2 3 4 5 SELECT instr('corporate floor','or', 3); instr ------- 5 (1 row) 1 2 3 4 5 SELECT instr('corporate floor','or',-3,2); instr ------- 2 (1 row)
  • locate(substring,string[,position]) 描述:从字符串string的position(缺省时为1)所指的位置开始查找并返回第一次出现子串substring位置的值。以字符为计算单位。当string中不存在substring时,返回0。 返回值类型:integer 示例: 1 2 3 4 5 SELECT locate('ball','football'); locate -------- 5 (1 row) 1 2 3 4 5 SELECT locate('er','soccerplayer','6'); locate -------- 11 (1 row)
  • lpad(string varchar, length int[, repeat_string varchar]) 描述:在string的左侧添上一系列的repeat_string(缺省为空白)来组成一个总长度为n的新字符串。 如果string本身的长度比指定的长度length长,则本函数将把string截断并把前面长度为length的字符串内容返回。 返回值类型:varchar 示例: 1 2 3 4 5 SELECT lpad('PAGE 1',15,'*.'); lpad ----------------- *.*.*.*.*PAGE 1 (1 row) 1 2 3 4 5 SELECT lpad('hello world',5,'abcd'); lpad ------- hello (1 row)
  • overlay(string placing string FROM int [for int]) 描述:替换子字符串。FROM int表示从第一个string的第几个字符开始替换,for int表示替换第一个string的字符数目。 返回值类型:text 示例: 1 2 3 4 5 SELECT overlay('hello' placing 'world' from 2 for 3 ); overlay --------- hworldo (1 row)
  • position(substring in string) 描述:指定子字符串的位置。若string中没有substring,则返回0。 返回值类型:integer 示例: 1 2 3 4 5 6 7 8 9 10 11 SELECT position('ing' in 'string'); position ---------- 4 (1 row) SELECT position('ing' in 'strin'); position ---------- 0 (1 row)
  • concat(str1,str2) 描述:将字符串str1和str2连接并返回。 ORA和TD兼容模式下,返回结果为所有非NULL字符串的连接。 MySQL兼容模式下,入参中存在NULL时,返回结果为NULL。 返回值类型:varchar 示例: 1 2 3 4 5 SELECT concat('Hello', ' World!'); concat -------------- Hello World! (1 row)
  • convert(string bytea, src_encoding name, dest_encoding name) 描述:以dest_encoding指定的目标编码方式转化字符串bytea。src_encoding指定源编码方式,在该编码下,string必须是合法的。 返回值类型:bytea 示例: 1 2 3 4 5 SELECT convert('text_in_utf8', 'UTF8', 'GBK'); convert ---------------------------- \x746578745f696e5f75746638 (1 row) 如果源编码格式到目标编码格式的转化规则不存在,则字符串不进行任何转换直接返回,如GBK和LATIN1之间的转换规则是不存在的,具体转换规则可以通过查看系统表pg_conversion获得。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 show server_encoding; server_encoding ----------------- LATIN1 (1 row) SELECT convert_from('some text', 'GBK'); convert_from -------------- some text (1 row) db_latin1=# SELECT convert_to('some text', 'GBK'); convert_to ---------------------- \x736f6d652074657874 (1 row) db_latin1=# SELECT convert('some text', 'GBK', 'LATIN1'); convert ---------------------- \x736f6d652074657874 (1 row)
  • 语法格式 修改自定义函数的附加参数: 1 2 ALTER FUNCTION function_name ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) action [ ... ] [ RESTRICT ]; 其中附加参数action子句语法为: 1 2 3 4 5 6 7 8 9 10 11 {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT} | {IMMUTABLE | STABLE | VOLATILE} | {SHIPPABLE | NOT SHIPPABLE} | {NOT FENCED | FENCED} | [ NOT ] LEAKPROOF | { [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER } | AUTHID { DEFINER | CURRENT_USER } | COST execution_cost | ROWS result_rows | SET configuration_parameter { { TO | = } { value | DEFAULT }| FROM CURRENT} | RESET {configuration_parameter | ALL} 修改自定义函数的名字: 1 2 ALTER FUNCTION funname ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) RENAME TO new_name; 修改自定义函数的所属者: 1 2 ALTER FUNCTION funname ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) OWNER TO new_owner; 修改自定义函数的模式: 1 2 ALTER FUNCTION funname ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) SET SCHEMA new_schema;
  • 参数说明 function_name 要修改的函数名称。 取值范围:已存在的函数名。 argmode 标识该参数是输入、输出参数。 取值范围:IN/OUT/IN OUT argname 参数名称。 取值范围:字符串,符合标识符命名规范。 argtype 参数类型。 取值范围:有效的类型,请参考数据类型。 CALLED ON NULL INPUT 表明该函数的某些参数是NULL的时候可以按照正常的方式调用。缺省时与指定此参数的作用相同。 RETURNS NULL ON NULL INPUT STRICT STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了该参数,则如果存在NULL参数时就不会执行此函数,而是自动假设一个NULL结果。 RETURNS NULL ON NULL INPUT和STRICT的功能相同。 IMMUTABLE 表示该函数在给出同样的参数值时总是返回同样的结果。 STABLE 表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。 VOLATILE 表示该函数值可以在一次表扫描内改变,不会做任何优化。 SHIPPABLE NOT SHIPPABLE 表示该函数是否可以下推到DN上执行。 对于IMMUTABLE类型的函数,函数始终可以下推到DN上执行。 对于STABLE/VOLATILE类型的函数,仅当函数的属性是SHIPPABLE的时候,函数可以下推到DN执行。 LEAKPROOF 表示该函数没有副作用,指出参数只包括返回值。LEAKPROOF只能由系统管理员设置。 (可选)EXTERNAL 目的是和SQL兼容,这个特性适合于所有函数,而不仅是外部函数。 SECURITY INVOKER AUTHID CURREN_USER 表明该函数将以调用它的用户的权限执行。缺省时与指定此参数的作用相同。 SECURITY INVOKER和AUTHID CURREN_USER的功能相同。 SECURITY DEFINER AUTHID DEFINER 声明该函数将以创建它的用户的权限执行。 AUTHID DEFINER和SECURITY DEFINER的功能相同。 COST execution_cost 用来估计函数的执行成本。 execution_cost以cpu_operator_cost为单位。 取值范围:正数 ROWS result_rows 估计函数返回的行数。用于函数返回的是一个集合。 取值范围:正数,默认值是1000行。 configuration_parameter value 把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。 取值范围:字符串 DEFAULT OFF RESET 指定默认值。 from current 取当前会话中的值设置为configuration_parameter的值。 new_name 函数的新名称。要修改函数的所属模式,必须拥有新模式的CREATE权限。 取值范围:字符串,符合标识符命名规范。 new_owner 函数的新所有者。要修改函数的所有者,新所有者必须拥有该函数所属模式的CREATE权限。 取值范围:已存在的用户角色。 new_schema 函数的新模式。 取值范围:已存在的模式。
  • 示例 创建计算两个整数的和的函数,并返回结果。若果输入为null,则返回null: 1 2 3 4 5 6 7 8 DROP FUNCTION IF EXISTS func_add_sql2; CREATE FUNCTION func_add_sql2(num1 integer, num2 integer) RETURN integer AS BEGIN RETURN num1 + num2; END; / ; 修改函数add的执行规则为IMMUTABLE,即参数不变时返回相同结果: 1 ALTER FUNCTION func_add_sql2(INTEGER, INTEGER) IMMUTABLE; 将函数func_add_sql2的名称修改为add_two_number: 1 ALTER FUNCTION func_add_sql2(INTEGER, INTEGER) RENAME TO add_two_number; 将函数add_two_number的属者改为dbadmin: 1 ALTER FUNCTION add_two_number(INTEGER, INTEGER) OWNER TO dbadmin;
共100000条