字符处理函数和操作符

openGauss提供的字符处理函数和操作符主要用于字符串与字符串、字符串与非字符串之间的连接,以及字符串的模式匹配操作。注意:字符串处理函数除了length相关函数,其他函数和操作符不支持大于1GBclob作为参数。

  • bit_length(string)

描述:字符串的位数。

返回值类型:int

示例:

1. openGauss=# SELECT bit_length('world'); 2. bit_length 3. ------------ 4. 40 5. (1 row) - btrim(string text [, characters text])

描述:从string开头和结尾删除只包含characters中字符(缺省是空白)的最长字符串。

返回值类型:text

示例:

1. openGauss=# SELECT btrim('sring' , 'ing'); 2. btrim 3. ------- 4. sr 5. (1 row) - char_length(string)或character_length(string)

描述:字符串中的字符个数。

返回值类型:int

示例:

1. openGauss=# SELECT char_length('hello'); 2. char_length 3. ------------- 4. 5 5. (1 row) - instr(text,text,int,int)

描述:instr(string1,string2,int1,int2)返回在string1中从int1位置开始匹配到第int2次string2的位置,第一个int表示开始匹配起始位置,第二个int表示匹配的次数。

返回值类型:int

示例:

1. openGauss=# SELECT instr( 'abcdabcdabcd', 'bcd', 2, 2 ); 2. instr 3. ------- 4. 6 5. (1 row) - lengthb(text/bpchar)

描述:获取指定字符串的字节数。

返回值类型:int

示例:

1. openGauss=# SELECT lengthb('hello'); 2. lengthb 3. --------- 4. 5 5. (1 row) - left(str text, n int)

描述:返回字符串的前n个字符。当n是负数时,返回除最后|n|个字符以外的所有字符。

返回值类型:text

示例:

1. openGauss=# SELECT left('abcde', 2); 2. left 3. ------ 4. ab 5. (1 row) - length(string bytea, encoding name )

描述:指定encoding编码格式的string的字符数。在这个编码格式中,string必须是有效的。

返回值类型:int

示例:

1. openGauss=# SELECT length('jose', 'UTF8'); 2. length 3. -------- 4. 4 5. (1 row)

字符处理函数和操作符 - 图1 说明:

如果是查询bytea类型的长度,指定utf8编码时,最大长度只能为536870888。 - lpad(string text, length int [, fill text])

描述:通过填充字符fill(缺省时为空白),把string填充为length长度。如果string已经比length长则将其尾部截断。

返回值类型:text

示例:

1. openGauss=# SELECT lpad('hi', 5, 'xyza'); 2. lpad 3. ------- 4. xyzhi 5. (1 row) - notlike(x bytea name text, y bytea text)

描述:比较x和y是否不一致。

返回值类型:bool

示例:

1. openGauss=# SELECT notlike(1,2); 2. notlike 3. -------------- 4. t 5. (1 row) 6. openGauss=# SELECT notlike(1,1); 7. notlike 8. -------------- 9. f 10. (1 row) - octet_length(string)

描述:字符串中的字节数。

返回值类型:int

示例:

1. openGauss=# SELECT octet_length('jose'); 2. octet_length 3. -------------- 4. 4 5. (1 row) - overlay(string placing string FROM int [for int])

描述:替换子字符串。FROM int表示从第一个string的第几个字符开始替换,for int表示替换第一个string的字符数目。

返回值类型:text

示例:

1. openGauss=# SELECT overlay('hello' placing 'world' from 2 for 3 ); 2. overlay 3. --------- 4. hworldo 5. (1 row) - position(substring in string)

描述:指定子字符串的位置。字符串区分大小写。

返回值类型:int,字符串不存在时返回0。

示例:

1. openGauss=# SELECT position('ing' in 'string'); 2. position 3. ---------- 4. 4 5. (1 row) - pg_client_encoding()

描述:当前客户端编码名称。

返回值类型:name

示例:

1. openGauss=# SELECT pg_client_encoding(); 2. pg_client_encoding 3. -------------------- 4. UTF8 5. (1 row) - quote_ident(string text)

描述:返回适用于SQL语句的标识符形式(使用适当的引号进行界定)。只有在必要的时候才会添加引号(字符串包含非标识符字符或者会转换大小写的字符)。返回值中嵌入的引号都写了两次。

返回值类型:text

示例:

1. openGauss=# SELECT quote_ident('hello world'); 2. quote_ident 3. -------------- 4. "hello world" 5. (1 row) - quote_literal(string text)

描述:返回适用于在SQL语句里当作文本使用的形式(使用适当的引号进行界定)。

返回值类型:text

示例:

1. openGauss=# SELECT quote_literal('hello'); 2. quote_literal 3. --------------- 4. 'hello' 5. (1 row)

如果出现如下写法,text文本将进行转义。

1. openGauss=# SELECT quote_literal(E'O\'hello'); 2. quote_literal 3. --------------- 4. 'O''hello' 5. (1 row)

如果出现如下写法,反斜杠会写入两次。

1. openGauss=# SELECT quote_literal('O\hello'); 2. quote_literal 3. --------------- 4. E'O\\hello' 5. (1 row)

如果参数为NULL,返回空。如果参数可能为null,通常使用函数quote_nullable更适用。

``` 1. openGauss=# SELECT quote_literal(NULL); 2. quote_literal 3. ---------------

  1. (1 row) ```
  2. quote_literal(value anyelement)

描述:将给定的值强制转换为text,加上引号作为文本。

返回值类型:text

示例:

1. openGauss=# SELECT quote_literal(42.5); 2. quote_literal 3. --------------- 4. '42.5' 5. (1 row)

如果出现如下写法,定值将进行转义。

1. openGauss=# SELECT quote_literal(E'O\'42.5'); 2. quote_literal 3. --------------- 4. '0''42.5' 5. (1 row)

如果出现如下写法,反斜杠会写入两次。

1. openGauss=# SELECT quote_literal('O\42.5'); 2. quote_literal 3. --------------- 4. E'O\\42.5' 5. (1 row) - quote_nullable(string text)

描述:返回适用于在SQL语句里当作字符串使用的形式(使用适当的引号进行界定)。

返回值类型:text

示例:

1. openGauss=# SELECT quote_nullable('hello'); 2. quote_nullable 3. ---------------- 4. 'hello' 5. (1 row)

如果出现如下写法,text文本将进行转义。

1. openGauss=# SELECT quote_nullable(E'O\'hello'); 2. quote_nullable 3. ---------------- 4. 'O''hello' 5. (1 row)

如果出现如下写法,反斜杠会写入两次。

1. openGauss=# SELECT quote_nullable('O\hello'); 2. quote_nullable 3. ---------------- 4. E'O\\hello' 5. (1 row)

如果参数为NULL,返回NULL。

1. openGauss=# SELECT quote_nullable(NULL); 2. quote_nullable 3. ---------------- 4. NULL 5. (1 row) - quote_nullable(value anyelement)

描述:将给定的参数值转化为text,加上引号作为文本。

返回值类型:text

示例:

1. openGauss=# SELECT quote_nullable(42.5); 2. quote_nullable 3. ---------------- 4. '42.5' 5. (1 row)

如果出现如下写法,定值将进行转义。

1. openGauss=# SELECT quote_nullable(E'O\'42.5'); 2. quote_nullable 3. ---------------- 4. 'O''42.5' 5. (1 row)

如果出现如下写法,反斜杠会写入两次。

1. openGauss=# SELECT quote_nullable('O\42.5'); 2. quote_nullable 3. ---------------- 4. E'O\\42.5' 5. (1 row)

如果参数为NULL,返回NULL。

1. openGauss=# SELECT quote_nullable(NULL); 2. quote_nullable 3. ---------------- 4. NULL 5. (1 row) - substring_inner(string [from int] [for int])

描述:截取子字符串,from int表示从第几个字符开始截取,for int表示截取几个字节。

返回值类型:text

示例:

1. openGauss=# select substring_inner('adcde', 2,3); 2. substring_inner 3. ----------------- 4. dcd 5. (1 row) - substring(string [from int] [for int])

描述:截取子字符串,from int表示从第几个字符开始截取,for int表示截取几个字节。

返回值类型:text

示例:

1. openGauss=# SELECT substring('Thomas' from 2 for 3); 2. substring 3. ----------- 4. hom 5. (1 row) - substring(string from pattern)

描述:截取匹配POSIX正则表达式的子字符串。如果没有匹配它返回空值,否则返回文本中匹配模式的那部分。

返回值类型:text

示例:

1. openGauss=# SELECT substring('Thomas' from '...$'); 2. substring 3. ----------- 4. mas 5. (1 row) 6. openGauss=# SELECT substring('foobar' from 'o(.)b'); 7. result 8. -------- 9. o 10. (1 row) 11. openGauss=# SELECT substring('foobar' from '(o(.)b)'); 12. result 13. -------- 14. oob 15. (1 row)

字符处理函数和操作符 - 图2 说明:

如果POSIX正则表达式模式包含任何圆括号,那么将返回匹配第一对子表达式(对应第一个左圆括号的)的文本。如果你想在表达式里使用圆括号而又不想导致这个例外,那么你可以在整个表达式外边放上一对圆括号。 - substring(string from pattern for escape)

描述:截取匹配SQL正则表达式的子字符串。声明的模式必须匹配整个数据串,否则函数失败并返回空值。为了标识在成功的时候应该返回的模式部分,模式必须包含逃逸字符的两次出现,并且后面要跟上双引号(”)。匹配这两个标记之间的模式的文本将被返回。

返回值类型:text

示例:

1. openGauss=# SELECT substring('Thomas' from '%#"o_a#"_' for '#'); 2. substring 3. ----------- 4. oma 5. (1 row) - rawcat(raw,raw)

描述:字符串拼接函数。

返回值类型:raw

示例:

1. openGauss=# SELECT rawcat('ab','cd'); 2. rawcat 3. -------- 4. ABCD 5. (1 row) - regexp_like(text,text,text)

描述:正则表达式的模式匹配函数。

返回值类型:bool

示例:

1. openGauss=# SELECT regexp_like('str','[ac]'); 2. regexp_like 3. ------------- 4. f 5. (1 row) - regexp_substr(string text, pattern text [, position int [, occurrence int [, flags text]]])

描述:正则表达式的抽取子串函数。与substr功能相似,正则表达式出现多个并列的括号时,也全部处理。

参数说明:

  • string:用于匹配的源字符串。
  • pattern:用于匹配的正则表达式模式串。
  • position:可选参数,表示从源字符串的第几个字符开始匹配,默认值为1。
  • occurrence:可选参数,表示抽取第几个满足匹配的子串,为,默认值为1。
  • flags:可选参数,包含零个或多个改变函数匹配行为的单字母标记。其中:m表示按照多行模式匹配。SQL语法兼容A和B的情况下,n选项在GUC参数behavior_compat_options值包含aformat_regexp_match时,表示 . 能够匹配 ‘\n’ 字符,flags中没有指定n时,默认.不能匹配 ‘\n’ 字符;值不包含aformat_regexp_match时,. 默认能匹配’\n’字符。n选项的含义与m选项一致。

返回值类型:text

示例:

``` 1. openGauss=# SELECT regexp_substr('str','[ac]'); 2. regexp_substr 3. ---------------

  1. (1 row)

  2. openGauss=# SELECT regexp_substr('foobarbaz', 'b(..)', 3, 2) AS RESULT;

  3. result

  4. baz
  5. (1 row) ```
  6. regexp_count(string text, pattern text [, position int [, flags text]])

描述:获取满足匹配的子串个数。

参数说明:

  • string:用于匹配的源字符串。
  • pattern:用于匹配的正则表达式模式串。
  • position:表示从源字符串的第几个字符开始匹配,为可选参数,默认值为1。
  • flags:可选参数,包含零个或多个改变函数匹配行为的单字母标记。其中:m表示按照多行模式匹配。SQL语法兼容A和B的情况下,n选项在GUC参数behavior_compat_options值包含aformat_regexp_match时,表示 . 能够匹配 ‘\n’ 字符,flags中没有指定n时,默认.不能匹配 ‘\n’ 字符;值不包含aformat_regexp_match时,. 默认能匹配’\n’字符。n选项的含义与m选项一致。可选的参数包括b,c,e,i,m,n,p,q,s,t,w,x。

返回值类型:int

示例:

1. openGauss=# SELECT regexp_count('foobarbaz','b(..)', 5) AS RESULT; 2. result 3. -------- 4. 1 5. (1 row) - regexp_instr(string text, pattern text [, position int [, occurrence int [, return_opt int [, flags text]]]])

描述:获取满足匹配条件的子串位置(从1开始)。如果没有匹配的子串,则返回0。

参数说明:

  • string:用于匹配的源字符串。
  • pattern:用于匹配的正则表达式模式串。
  • position:可选参数,表示从源字符串的第几个字符开始匹配,默认值为1。
  • occurrence:可选参数,表示获取第occurrence个匹配子串的位置,默认值为1。
  • return_opt:可选参数,用于控制返回匹配子串的首字符位置还是尾字符位置。取值为0时,返回匹配子串的第一个字符的位置(从1开始计算),取值为大于0的值时,返回匹配子串的尾字符的下一个字符的位置。默认值为0。
  • flags:可选参数,包含零个或多个改变函数匹配行为的单字母标记。其中:m表示按照多行模式匹配。SQL语法兼容A和B的情况下,n选项在GUC参数behavior_compat_options值包含aformat_regexp_match时,表示 . 能够匹配 ‘\n’ 字符,flags中没有指定n时,默认.不能匹配 ‘\n’ 字符;值不包含aformat_regexp_match时,. 默认能匹配’\n’字符。n选项的含义与m选项一致。

返回值类型:int

示例:

``` 1. openGauss=# SELECT regexp_instr('foobarbaz','b(..)', 1, 1, 0) AS RESULT; 2. result 3. -------- 4. 4 5. (1 row)

  1. openGauss=# SELECT regexp_instr('foobarbaz','b(..)', 1, 2, 0) AS RESULT;
  2. result

  3. 7
  4. (1 row) ```
  5. regexp_matches(string text, pattern text [, flags text])

描述:返回string中所有匹配POSIX正则表达式的子字符串。如果pattern不匹配,该函数不返回行。如果模式不包含圆括号子表达式,则每一个被返回的行都是一个单一元素的文本数组,其中包括匹配整个模式的子串。如果模式包含圆括号子表达式,该函数返回一个文本数组,它的第n个元素是匹配模式的第n个圆括号子表达式的子串。

flags参数为可选参数,包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。

字符处理函数和操作符 - 图3 须知:

如果提供了最后一个参数,但参数值是空字符串(’’),且数据库SQL兼容模式设置为A的情况下,会导致返回结果为空集。这是因为A兼容模式将’’作为NULL处理,避免此类行为的方式有如下几种:

  • 将数据库SQL兼容模式改为C;
  • 不提供最后一个参数,或最后一个参数不为空字符串。

返回值类型:setof text[]

示例:

1. openGauss=# SELECT regexp_matches('foobarbequebaz', '(bar)(beque)'); 2. regexp_matches 3. ---------------- 4. {bar,beque} 5. (1 row) 6. openGauss=# SELECT regexp_matches('foobarbequebaz', 'barbeque'); 7. regexp_matches 8. ---------------- 9. {barbeque} 10. (1 row) 11. openGauss=# SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g'); 12. result 13. -------------- 14. {bar,beque} 15. {bazil,barf} 16. (2 rows) - regexp_split_to_array(string text, pattern text [, flags text ])

描述:用POSIX正则表达式作为分隔符,分隔string。和regexp_split_to_table相同,不过regexp_split_to_array会把它的结果以一个text数组的形式返回。

返回值类型:text[]

示例:

1. openGauss=# SELECT regexp_split_to_array('hello world', E'\\s+'); 2. regexp_split_to_array 3. ----------------------- 4. {hello,world} 5. (1 row) - regexp_split_to_table(string text, pattern text [, flags text])

描述:用POSIX正则表达式作为分隔符,分隔string。如果没有与pattern的匹配,该函数返回string。如果有至少有一个匹配,对每一个匹配它都返回从上一个匹配的末尾(或者串的开头)到这次匹配开头之间的文本。当没有更多匹配时,它返回从上一次匹配的末尾到串末尾之间的文本。

flags参数包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配。

返回值类型:setof text

示例:

1. openGauss=# SELECT regexp_split_to_table('hello world', E'\\s+'); 2. regexp_split_to_table 3. ----------------------- 4. hello 5. world 6. (2 rows) - repeat(string text, number int )

描述:将string重复number次。

返回值类型:text。

示例:

1. openGauss=# SELECT repeat('Pg', 4); 2. repeat 3. ---------- 4. PgPgPgPg 5. (1 row)

字符处理函数和操作符 - 图4 说明:

由于数据库内存分配机制限制单次内存分配不可超过1GB,因此number最大值不应超过(1G-x)/lengthb(string) - 1。x为头信息长度,通常大于4字节,其具体值在不同的场景下存在差异。 - replace(string text, from text, to text)

描述:把字符串string里出现地所有子字符串from的内容替换成子字符串to的内容。

返回值类型:text

示例:

1. openGauss=# SELECT replace('abcdefabcdef', 'cd', 'XXX'); 2. replace 3. ---------------- 4. abXXXefabXXXef 5. (1 row) - replace(string, substring)

描述:删除字符串string里出现的所有子字符串substring的内容。

string类型:text

substring类型:text

返回值类型:text

示例:

1. openGauss=# SELECT replace('abcdefabcdef', 'cd'); 2. replace 3. ---------------- 4. abefabef 5. (1 row) - reverse(str)

描述:返回颠倒的字符串。

返回值类型:text

示例:

1. openGauss=# SELECT reverse('abcde'); 2. reverse 3. --------- 4. edcba 5. (1 row) - right(str text, n int)

描述:返回字符串中的后n个字符。当n是负值时,返回除前|n|个字符以外的所有字符。

返回值类型:text

示例:

``` 1. openGauss=# SELECT right('abcde', 2); 2. right 3. ------- 4. de 5. (1 row)

  1. openGauss=# SELECT right('abcde', -2);
  2. right

  3. cde
  4. (1 row) ```
  5. rpad(string text, length int [, fill text])

描述:使用填充字符fill(缺省时为空白),把string填充到length长度。如果string已经比length长则将其从尾部截断。

返回值类型:text

示例:

1. openGauss=# SELECT rpad('hi', 5, 'xy'); 2. rpad 3. ------- 4. hixyx 5. (1 row) - rtrim(string text [, characters text])

描述:从字符串string的结尾删除只包含characters中字符(缺省是个空白)的最长的字符串。

返回值类型:text

示例:

1. openGauss=# SELECT rtrim('trimxxxx', 'x'); 2. rtrim 3. ------- 4. trim 5. (1 row) - substrb(text,int,int)

描述:提取子字符串,第一个int表示提取的起始位置,第二个表示提取几位字符。

返回值类型:text

示例:

1. openGauss=# SELECT substrb('string',2,3); 2. substrb 3. --------- 4. tri 5. (1 row) - substrb(text,int)

描述:提取子字符串,int表示提取的起始位置。

返回值类型:text

示例:

1. openGauss=# SELECT substrb('string',2); 2. substrb 3. --------- 4. tring 5. (1 row) - substr(bytea,from,count)

描述:从参数bytea中抽取子字符串。from表示抽取的起始位置,count表示抽取的子字符串长度。

返回值类型:text

示例:

1. openGauss=# SELECT substr('string',2,3); 2. substr 3. -------- 4. tri 5. (1 row) - string || string

描述:连接字符串。

返回值类型:text

示例:

1. openGauss=# SELECT 'MPP'||'DB' AS RESULT; 2. result 3. -------- 4. MPPDB 5. (1 row) - string || non-string或non-string || string

描述:连接字符串和非字符串。

返回值类型:text

示例:

1. openGauss=# SELECT 'Value: '||42 AS RESULT; 2. result 3. ----------- 4. Value: 42 5. (1 row) - split_part(string text, delimiter text, field int)

描述:根据delimiter分隔string返回生成的第field个子字符串(从出现第一个delimiter的text为基础)。

返回值类型:text

示例:

1. openGauss=# SELECT split_part('abc~@~def~@~ghi', '~@~', 2); 2. split_part 3. ------------ 4. def 5. (1 row) - strpos(string, substring)

描述:指定的子字符串的位置。和position(substring in string)一样,不过参数顺序相反。

返回值类型:int

示例:

1. openGauss=# SELECT strpos('source', 'rc'); 2. strpos 3. -------- 4. 4 5. (1 row) - to_hex(number int or bigint)

描述:把number转换成十六进制表现形式。

返回值类型:text

示例:

1. openGauss=# SELECT to_hex(2147483647); 2. to_hex 3. ---------- 4. 7fffffff 5. (1 row) - translate(string text, from text, to text)

描述:把在string中包含的任何匹配from中字符的字符转化为对应的在to中的字符。如果from比to长,删掉在from中出现的额外的字符。

返回值类型:text

示例:

1. openGauss=# SELECT translate('12345', '143', 'ax'); 2. translate 3. ----------- 4. a2x5 5. (1 row) - length(string)

描述:获取参数string中字符的数目。

返回值类型:integer

示例:

1. openGauss=# SELECT length('abcd'); 2. length 3. -------- 4. 4 5. (1 row) - lengthb(string)

描述:获取参数string中字节的数目。与字符集有关,同样的中文字符,在GBK与UTF8中,返回的字节数不同。

返回值类型:integer

示例:

1. openGauss=# SELECT lengthb('Chinese'); 2. lengthb 3. --------- 4. 7 5. (1 row) - substr(string,from)

描述:

从参数string中抽取子字符串。

from表示抽取的起始位置。

  • from为0时,按1处理。
  • from为正数时,抽取从from到末尾的所有字符。
  • from为负数时,抽取字符串的后n个字符,n为from的绝对值。

返回值类型:varchar

示例:

from为正数时:

1. openGauss=# SELECT substr('ABCDEF',2); 2. substr 3. -------- 4. BCDEF 5. (1 row)

from为负数时:

1. openGauss=# SELECT substr('ABCDEF',-2); 2. substr 3. -------- 4. EF 5. (1 row) - substr(string,from,count)

描述:

从参数string中抽取子字符串。

from表示抽取的起始位置。

count表示抽取的子字符串长度。

  • from为0时,按1处理。
  • from为正数时,抽取从from开始的count个字符。
  • from为负数时,抽取从倒数第n个开始的count个字符,n为from的绝对值。
  • count小于1时,返回null。

返回值类型:varchar

示例:

from为正数时:

1. openGauss=# SELECT substr('ABCDEF',2,2); 2. substr 3. -------- 4. BC 5. (1 row)

from为负数时:

1. openGauss=# SELECT substr('ABCDEF',-3,2); 2. substr 3. -------- 4. DE 5. (1 row) - substrb(string,from)

描述:该函数和SUBSTR(string,from)函数功能一致,但是计算单位为字节。

返回值类型:bytea

示例:

1. openGauss=# SELECT substrb('ABCDEF',-2); 2. substrb 3. --------- 4. EF 5. (1 row) - substrb(string,from,count)

描述:该函数和SUBSTR(string,from,count)函数功能一致,但是计算单位为字节。

返回值类型:bytea

示例:

1. openGauss=# SELECT substrb('ABCDEF',2,2); 2. substrb 3. --------- 4. BC 5. (1 row) - trim([leading |trailing |both] [characters] from string)

描述:从字符串string的开头、结尾或两边删除只包含characters中字符(缺省是一个空白)的最长的字符串。

返回值类型:text

示例:

1. openGauss=# SELECT trim(BOTH 'x' FROM 'xTomxx'); 2. btrim 3. ------- 4. Tom 5. (1 row)

1. openGauss=# SELECT trim(LEADING 'x' FROM 'xTomxx'); 2. ltrim 3. ------- 4. Tomxx 5. (1 row)

1. openGauss=# SELECT trim(TRAILING 'x' FROM 'xTomxx'); 2. rtrim 3. ------- 4. xTom 5. (1 row) - rtrim(string [, characters])

描述:从字符串string的结尾删除只包含characters中字符(缺省是个空白)的最长的字符串。

返回值类型:text

示例:

1. openGauss=# SELECT rtrim('TRIMxxxx','x'); 2. rtrim 3. ------- 4. TRIM 5. (1 row) - ltrim(string [, characters])

描述:从字符串string的开头删除只包含characters中字符(缺省是一个空白)的最长的字符串。

返回值类型:text

示例:

1. openGauss=# SELECT ltrim('xxxxTRIM','x'); 2. ltrim 3. ------- 4. TRIM 5. (1 row) - upper(string)

描述:把字符串转化为大写。

返回值类型:text

示例:

1. openGauss=# SELECT upper('tom'); 2. upper 3. ------- 4. TOM 5. (1 row) - lower(string)

描述:把字符串转化为小写。

返回值类型:text

示例:

1. openGauss=# SELECT lower('TOM'); 2. lower 3. ------- 4. tom 5. (1 row) - rpad(string varchar, length int [, fill varchar])

描述:使用填充字符fill(缺省时为空白),把string填充到length长度。如果string已经比length长则将其从尾部截断。

length参数在openGauss中表示字符长度。一个汉字长度计算为一个字符。

返回值类型:varchar

示例:

1. openGauss=# SELECT rpad('hi',5,'xyza'); 2. rpad 3. ------- 4. hixyz 5. (1 row)

1. openGauss=# SELECT rpad('hi',5,'abcdefg'); 2. rpad 3. ------- 4. hiabc 5. (1 row) - instr(string,substring[,position,occurrence])

描述:从字符串string的position(缺省时为1)所指的位置开始查找并返回第occurrence(缺省时为1)次出现子串substring的位置的值。

  • 当position为0时,返回0。
  • 当position为负数时,从字符串倒数第n个字符往前逆向搜索。n为position的绝对值。

本函数以字符为计算单位,如一个汉字为一个字符。

返回值类型:integer

示例:

1. openGauss=# SELECT instr('corporate floor','or', 3); 2. instr 3. ------- 4. 5 5. (1 row)

1. openGauss=# SELECT instr('corporate floor','or',-3,2); 2. instr 3. ------- 4. 2 5. (1 row) - initcap(string)

描述:将字符串中的每个单词的首字母转化为大写,其他字母转化为小写。

返回值类型:text

示例:

1. openGauss=# SELECT initcap('hi THOMAS'); 2. initcap 3. ----------- 4. Hi Thomas 5. (1 row) - ascii(string)

描述:参数string的第一个字符的ASCII码。

返回值类型:integer

示例:

1. openGauss=# SELECT ascii('xyz'); 2. ascii 3. ------- 4. 120 5. (1 row) - replace(string varchar, search_string varchar, replacement_string varchar)

描述:把字符串string中所有子字符串search_string替换成子字符串replacement_string。

返回值类型:varchar

示例:

1. openGauss=# SELECT replace('jack and jue','j','bl'); 2. replace 3. ---------------- 4. black and blue 5. (1 row) - lpad(string varchar, length int[, repeat_string varchar])

描述:在string的左侧添上一系列的repeat_string(缺省为空白)来组成一个总长度为n的新字符串。

如果string本身的长度比指定的长度length长,则本函数将把string截断并把前面长度为length的字符串内容返回。

返回值类型:varchar

示例:

1. openGauss=# SELECT lpad('PAGE 1',15,'*.'); 2. lpad 3. ----------------- 4. *.*.*.*.*PAGE 1 5. (1 row)

1. openGauss=# SELECT lpad('hello world',5,'abcd'); 2. lpad 3. ------- 4. hello 5. (1 row) - concat(str1,str2)

描述:将字符串str1和str2连接并返回。

字符处理函数和操作符 - 图5 须知:

数据库SQL兼容模式设置为MY的情况下,参数str1或str2为NULL会导致返回结果为NULL。

返回值类型:varchar

示例:

1. openGauss=# SELECT concat('Hello', ' World!'); 2. concat 3. -------------- 4. Hello World! 5. (1 row) 6. openGauss=# SELECT concat('Hello', NULL); 7. concat 8. -------- 9. Hello 10. (1 row) - chr(integer)

描述:给出ASCII码的字符。

返回值类型:varchar

示例:

1. openGauss=# SELECT chr(65); 2. chr 3. ----- 4. A 5. (1 row) - regexp_substr(source_char, pattern)

描述:正则表达式的抽取子串函数。SQL语法兼容A和B的情况下,GUC参数behavior_compat_options的值包含aformat_regexp_match时,. 不能匹配 ‘\n’ 字符;不包含aformat_regexp_match时,. 能够匹配’\n’字符。

返回值类型:text

示例:

1. openGauss=# SELECT regexp_substr('500 Hello World, Redwood Shores, CA', ',[^,]+,') "REGEXPR_SUBSTR"; 2. REGEXPR_SUBSTR 3. ------------------- 4. , Redwood Shores, 5. (1 row) - regexp_replace(string, pattern, replacement [,flags ])

描述:替换匹配POSIX正则表达式的子字符串。 如果没有匹配pattern,那么返回不加修改的string串。 如果有匹配,则返回的string串里面的匹配子串将被replacement串替换掉。

replacement串可以包含\n, 其中\n是1 到9, 表明string串里匹配模式里第n个圆括号子表达式的子串应该被插入,并且它可以包含\&表示应该插入匹配整个模式的子串。

可选的flags参数包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。m表示按照多行模式匹配。SQL语法兼容A和B的情况下,n选项在GUC参数behavior_compat_options的值包含aformat_regexp_match时,表示 . 能够匹配 ‘\n’ 字符,flags中没有指定n时,默认.不能匹配 ‘\n’ 字符;值不包含aformat_regexp_match时,. 默认能匹配’\n’字符。n 选项的含义与 m 选项一致。

返回值类型:varchar

示例:

1. openGauss=# SELECT regexp_replace('Thomas', '.[mN]a.', 'M'); 2. regexp_replace 3. ---------------- 4. ThM 5. (1 row) 6. openGauss=# SELECT regexp_replace('foobarbaz','b(..)', E'X\\1Y', 'g') AS RESULT; 7. result 8. ------------- 9. fooXarYXazY 10. (1 row) - repexp_replace(string text, pattern text [, replacement text [, position int [, occurrence int [, flags text]]]])

描述:替换匹配POSIX正则表达式的子字符串。 如果没有匹配pattern,那么返回不加修改的string串。 如果有匹配,则返回的string串里面的匹配子串将被replacement串替换掉。

参数说明:

  • string:用于匹配的源字符串
  • pattern:用于匹配的正则表达式模式串
  • replacement:可选参数,用于替换匹配子串的字符串。如果不给定参数值或者为null, 表示用空串替换。
  • position:可选参数,表示从源字符串的第几个字符开始匹配,默认值为1。
  • occurrence:可选参数,表示替换第occurrence个匹配的子串。默认值为0,表示替换所有匹配到的子串。
  • flags:可选参数,包含零个或多个改变函数匹配行为的单字母标记。其中:m表示按照多行模式匹配。SQL语法兼容A和B的情况下,n选项在GUC参数behavior_compat_options值包含aformat_regexp_match时,表示 . 能够匹配 ‘\n’ 字符,flags中没有指定n时,默认.不能匹配 ‘\n’ 字符;值不包含aformat_regexp_match时,. 默认能匹配’\n’字符。n选项的含义与m选项一致。

返回值类型:text

示例:

1. openGauss=# SELECT regexp_replace('foobarbaz','b(..)', E'X\\1Y', 2, 2, 'n') AS RESULT; 2. result 3. ------------ 4. foobarXazY 5. (1 row) - concat_ws(sep text, str”any” [, str”any” [, …] ])

描述:以第一个参数为分隔符,链接第二个以后的所有参数。NULL参数被忽略。

字符处理函数和操作符 - 图6 须知:

  • 如果第一个参数值是NULL,会导致返回结果为NULL。
  • 如果第一个参数值是空字符串(’’),且数据库SQL兼容模式设置为A的情况下,会导致返回结果为NULL。这是因为A兼容模式>将’’作为NULL处理,避免此类行为,可以将数据库SQL兼容模式改为B、C或者PG。

返回值类型:text

示例:

1. openGauss=# SELECT concat_ws(',', 'ABCDE', 2, NULL, 22); 2. concat_ws 3. ------------ 4. ABCDE,2,22 5. (1 row) - nlssort(string text, sort_method text)

描述:以sort_method指定的排序方式返回字符串在该排序模式下的编码值,该编码值可用于排序,其决定了string在这种排序模式下的先后位置。目前支持的sort_method为’nls_sort=schinese_pinyin_m’和’nls_sort=generic_m_ci’。其中,’nls_sort=generic_m_ci’仅支持纯英文不区分大小写排序。

string类型:text

sort_method类型:text

返回值类型:text

示例:

``` 1. openGauss=# SELECT nlssort('A', 'nls_sort=schinese_pinyin_m'); 2. nlssort 3. ---------------- 4. 01EA0000020006 5. (1 row)

  1. openGauss=# SELECT nlssort('A', 'nls_sort=generic_m_ci');
  2. nlssort

  3. 01EA000002
  4. (1 row) ```
  5. convert(string bytea, src_encoding name, dest_encoding name)

描述:以dest_encoding指定的目标编码方式转化字符串bytea。src_encoding指定源编码方式,在该编码下,string必须是合法的。

返回值类型:bytea

示例:

1. openGauss=# SELECT convert('text_in_utf8', 'UTF8', 'GBK'); 2. convert 3. ---------------------------- 4. \x746578745f696e5f75746638 5. (1 row)

img 说明: 如果源编码格式到目标编码格式的转化规则不存在,则字符串不进行任何转换直接返回,如GBK和LATIN1之间的转换规则是不存在的,具体转换规则可以通过查看系统表pg_conversion获得。 示例:

1. openGauss=# show server_encoding; 2. server_encoding 3. ----------------- 4. LATIN1 5. (1 row) 6. openGauss=# SELECT convert_from('some text', 'GBK'); 7. convert_from 8. -------------- 9. some text 10. (1 row) 11. db_latin1=# SELECT convert_to('some text', 'GBK'); 12. convert_to 13. ---------------------- 14. \x736f6d652074657874 15. (1 row) 16. db_latin1=# SELECT convert('some text', 'GBK', 'LATIN1'); 17. convert 18. ---------------------- 19. \x736f6d652074657874 20. (1 row) - convert_from(string bytea, src_encoding name)

描述:以数据库的编码方式转化字符串bytea。

src_encoding指定源编码方式,在该编码下,string必须是合法的。

返回值类型:text

示例:

1. openGauss=# SELECT convert_from('text_in_utf8', 'UTF8'); 2. convert_from 3. -------------- 4. text_in_utf8 5. (1 row) - convert_to(string text, dest_encoding name)

描述:将字符串转化为dest_encoding的编码格式。

返回值类型:bytea

示例:

1. openGauss=# SELECT convert_to('some text', 'UTF8'); 2. convert_to 3. ---------------------- 4. \x736f6d652074657874 5. (1 row) - string [NOT] LIKE pattern [ESCAPE escape-character]

描述:模式匹配函数。

如果pattern不包含百分号或者下划线,该模式只代表它本身,这时候LIKE的行为就像等号操作符。在pattern里的下划线(_)匹配任何单个字符;而一个百分号(%)匹配零或多个任何字符。

要匹配下划线或者百分号本身,在pattern里相应的字符必须前导逃逸字符。缺省的逃逸字符是反斜杠,但是用户可以用ESCAPE子句指定一个。要匹配逃逸字符本身,写两个逃逸字符。

返回值类型:Boolean

示例:

1. openGauss=# SELECT 'AA_BBCC' LIKE '%A@_B%' ESCAPE '@' AS RESULT; 2. result 3. -------- 4. t 5. (1 row)

1. openGauss=# SELECT 'AA_BBCC' LIKE '%A@_B%' AS RESULT; 2. result 3. -------- 4. f 5. (1 row)

1. openGauss=# SELECT 'AA@_BBCC' LIKE '%A@_B%' AS RESULT; 2. result 3. -------- 4. t 5. (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. openGauss=# SELECT regexp_like('ABC', '[A-Z]'); 2. regexp_like 3. ------------- 4. t 5. (1 row)

1. openGauss=# SELECT regexp_like('ABC', '[D-Z]'); 2. regexp_like 3. ------------- 4. f 5. (1 row)

1. openGauss=# SELECT regexp_like('ABC', '[a-z]','i'); 2. regexp_like 3. ------------- 4. t 5. (1 row) - format(formatstr text [, str”any” [, …] ])

描述:格式化字符串。

返回值类型:text

示例:

1. openGauss=# SELECT format('Hello %s, %1$s', 'World'); 2. format 3. -------------------- 4. Hello World, World 5. (1 row) - md5(string)

描述:将string使用MD5加密,并以16进制数作为返回值。

字符处理函数和操作符 - 图8 说明:

MD5加密算法安全性低,存在安全风险,不建议使用。

返回值类型:text

示例:

1. openGauss=# SELECT md5('ABC'); 2. md5 3. ---------------------------------- 4. 902fbdd2b1df0c4f70b4a5d23525e932 5. (1 row) - sha(string) / sha1(string)

描述:将string使用SHA1加密,并以16进制数作为返回值,sha和sha1函数功能相同。

字符处理函数和操作符 - 图9 说明: SHA1加密算法安全性低,存在安全风险,不建议使用。 该函数仅在openGauss兼容MY类型时(即sql_compatibility = ‘B’)有效,其他类型不支持该函数。

返回值类型:text

示例:

1. openGauss=# select sha('ABC'); 2. sha 3. ------------------------------------------ 4. 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8 5. (1 row) 6. openGauss=# select sha1('ABC'); 7. sha1 8. ------------------------------------------ 9. 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8 10. (1 row) - sha2(string,hash_length)

描述:将string使用SHA2加密,并以16进制数作为返回值。

hash_length:对应相应的SHA2算法,可选值为 0(SHA-256)、224(SHA-224)、256(SHA-256)、384(SHA-384)、512(SHA-512),其他值将返回NULL。

字符处理函数和操作符 - 图10 说明: SHA224加密算法安全性低,存在安全风险,不建议使用。 SHA2函数会在日志中会记录哈希的明文,因此不建议用户用该函数加密秘钥等敏感信息。 该函数仅在openGauss兼容MY类型时(即sql_compatibility = ‘B’)有效,其他类型不支持该函数。

返回值类型:text

示例:

1. openGauss=# select sha2('ABC',224); 2. sha2 3. ---------------------------------------------------------- 4. 107c5072b799c4771f328304cfe1ebb375eb6ea7f35a3aa753836fad 5. (1 row) 6. openGauss=# select sha2('ABC',256); 7. sha2 8. ------------------------------------------------------------------ 9. b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78 10. (1 row) 11. openGauss=# select sha2('ABC',0); 12. sha2 13. ------------------------------------------------------------------ 14. b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78 15. (1 row) - decode(string text, format text)

描述:将二进制数据从文本数据中解码。

返回值类型:bytea

示例:

1. openGauss=# SELECT decode('MTIzAAE=', 'base64'); 2. decode 3. -------------- 4. \x3132330001 5. (1 row) - similar_escape(pat text, esc text)

描述:将一个 SQL:2008风格的正则表达式转换为POSIX风格。

返回值类型:text

示例:

1. openGauss=# select similar_escape('\s+ab','2'); 2. similar_escape 3. ---------------- 4. ^(?:\\s+ab)$ 5. (1 row) - svals(hstore)

描述:获取hstore中的值。

返回值类型:SETOF text

示例:

1. openGauss=# select svals('"aa"=>"bb"'); 2. svals 3. ------- 4. bb 5. (1 row) - tconvert(key text, value text)

描述:将字符串转换为hstore格式。

返回值类型:hstore

示例:

1. openGauss=# select tconvert('aa', 'bb'); 2. tconvert 3. ------------ 4. "aa"=>"bb" 5. (1 row) - find_in_set(text, set)

描述:查找给定成员在集合中的位置,从1开始计数。如果没有找到,返回0。

返回值类型:int2

示例:

1. openGauss=# select site, find_in_set('wuhan', site) from employee; 2. site | find_in_set 3. -----------------+------------- 4. beijing,nanjing | 0 5. beijing,wuhan | 2 6. (2 rows) - encode(data bytea, format text)

描述:将二进制数据编码为文本数据。

返回值类型:text

示例:

1. openGauss=# SELECT encode(E'123\\000\\001', 'base64'); 2. encode 3. ---------- 4. MTIzAAE= 5. (1 row)

字符处理函数和操作符 - 图11 说明:

  • 若字符串中存在换行符,如字符串由一个换行符和一个空格组成,在openGauss中LENGTH和LENGTHB的值为2。
  • 对于CHAR(n) 类型,openGauss中n是指字符个数。因此,对于多字节编码的字符集, LENGTHB函数返回的长度可能大于n。
  • openGauss支持多种类型的数据库,目前有4种,分别是A类型、B类型、C类型以及PG类型。在不指定数据库类型时,我们的数据库默认是A类型,A的词法分析器与另外三种不一样,在A中空字符串会被当作是NULL。所以,当使用A类型的数据库时,假如上述字符操作函数中有空字符串作为参数,会出现没有输出的情况。例如:

1. openGauss=# SELECT translate('12345','123',''); 2. translate 3. ----------- 4. (1 row)

这是因为内核在调用相应的函数进行处理前,会判断所输入的参数中是否含有NULL,假如有,则不会调用相应的函数,因此会没有输出。而在PG模式下,字符串的处理方式与postgresql保持一致,因此不会有上述问题产生。