• 沒有找到結果。

访问 XML 值

6 函数和操作符

6.3 字符处理函数和操作符

GaussDB(DWS)提供的字符处理函数和操作符主要用于字符串与字符串、字符串与非 字符串之间的连接,以及字符串的模式匹配操作。

● bit_length(string) 描述:字符串的位数。

返回值类型:int 示例:

SELECT bit_length('world');

bit_length 40 (1 row)

● btrim(string text [, characters text])

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

返回值类型:text 示例:

SELECT btrim('sring' , 'ing');

btrim sr(1 row)

● char_length(string)或character_length(string) 描述:字符串中的字符个数。

返回值类型:int 示例:

SELECT char_length('hello');

char_length 5 (1 row)

● instr(text,text,int,int)

描述:字符串匹配函数的位置,第一个int表示开始匹配起始位置,第二个int表示 匹配的次数。

返回值类型:int 示例:

SELECT instr( 'abcdabcdabcd', 'bcd', 2, 2 );

instr 6 (1 row)

● lengthb(text/bpchar)

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

返回值类型:int 示例:

SELECT lengthb('hello');

lengthb 5 (1 row)

● left(str text, n int)

描述:返回字符串的前n个字符。

– ORA和TD兼容模式下,当n是负数时,返回除最后|n|个字符以外的所有字 符。

– MySQL兼容模式下,当n是负数时,返回空串。

返回值类型:text 示例:

SELECT left('abcde', 2);

left ab(1 row)

● length(string bytea, encoding name )

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

返回值类型:int 示例:

SELECT length('jose', 'UTF8');

length 4 (1 row)

● lpad(string text, length int [, fill text])

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

返回值类型:text 示例:

SELECT lpad('hi', 5, 'xyza');

lpad xyzhi (1 row)

● octet_length(string) 描述:字符串中的字节数。

返回值类型:int 示例:

SELECT octet_length('jose');

octet_length 4 (1 row)

● overlay(string placing string FROM int [for int])

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

返回值类型:text 示例:

SELECT overlay('hello' placing 'world' from 2 for 3 );

overlay hworldo (1 row)

● position(substring in string) 描述:指定子字符串的位置。

返回值类型:int 示例:

SELECT position('ing' in 'string');

position 4 (1 row)

● pg_client_encoding()

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

返回值类型:name 示例:

SELECT pg_client_encoding();

pg_client_encoding UTF8

(1 row)

● quote_ident(string text)

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

返回值类型:text 示例:

SELECT quote_ident('hello world');

quote_ident "hello world"

(1 row)

● quote_literal(string text)

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

返回值类型:text 示例:

SELECT quote_literal('hello');

quote_literal 'hello' (1 row)

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

SELECT quote_literal(E'O\'hello');

quote_literal 'O''hello' (1 row)

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

SELECT quote_literal('O\hello');

quote_literal E'O\\hello' (1 row)

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

SELECT quote_literal(NULL);

quote_literal ---(1 row)

● quote_literal(value anyelement)

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

返回值类型:text 示例:

SELECT quote_literal(42.5);

quote_literal '42.5' (1 row)

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

SELECT quote_literal(E'O\'42.5');

quote_literal '0''42.5' (1 row)

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

SELECT quote_literal('O\42.5');

quote_literal E'O\\42.5' (1 row)

● quote_nullable(string text)

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

返回值类型:text 示例:

SELECT quote_nullable('hello');

quote_nullable

'hello' (1 row)

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

SELECT quote_nullable(E'O\'hello');

quote_nullable 'O''hello' (1 row)

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

SELECT quote_nullable('O\hello');

quote_nullable E'O\\hello' (1 row)

如果参数为NULL,返回NULL。

SELECT quote_nullable(NULL);

quote_nullable NULL (1 row)

● quote_nullable(value anyelement)

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

返回值类型:text 示例:

SELECT quote_nullable(42.5);

quote_nullable '42.5' (1 row)

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

SELECT quote_nullable(E'O\'42.5');

quote_nullable 'O''42.5' (1 row)

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

SELECT quote_nullable('O\42.5');

quote_nullable E'O\\42.5' (1 row)

如果参数为NULL,返回NULL。

SELECT quote_nullable(NULL);

quote_nullable NULL (1 row)

● substring(string [from int] [for int])

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

返回值类型:text 示例:

SELECT substring('Thomas' from 2 for 3);

substring

hom(1 row)

● substring(string from pattern)

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

返回值类型:text 示例:

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

● substring(string from pattern for escape)

描述:截取匹配SQL正则表达式的子字符串。声明的模式必须匹配整个数据串,

否则函数失败并返回空值。为了标识在成功的时候应该返回的模式部分,模式必 须包含逃逸字符的两次出现,并且后面要跟上双引号(")。匹配这两个标记之间 的模式的文本将被返回。

返回值类型:text 示例:

SELECT substring('Thomas' from '%#"o_a#"_' for '#');

substring oma(1 row)

● rawcat(raw,raw)

描述:字符串拼接函数。

返回值类型:raw 示例:

SELECT rawcat('ab','cd');

rawcat ABCD (1 row)

● regexp_like(text,text,text)

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

返回值类型:bool 示例:

SELECT regexp_like('str','[ac]');

regexp_like

f(1 row)

● regexp_substr(text,text)

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

返回值类型:text 示例:

SELECT regexp_substr('str','[ac]');

regexp_substr ---(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[]

示例:

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_split_to_array(string text, pattern text [, flags text ])

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

返回值类型:text[]

示例:

SELECT regexp_split_to_array('hello world', E'\\s+');

regexp_split_to_array {hello,world}

(1 row)

● regexp_split_to_table(string text, pattern text [, flags text])

描述:用POSIX正则表达式作为分隔符,分隔string。如果没有与pattern的匹配,

该函数返回string。如果有至少有一个匹配,对每一个匹配它都返回从上一个匹配 的末尾(或者串的开头)到这次匹配开头之间的文本。当没有更多匹配时,它返 回从上一次匹配的末尾到串末尾之间的文本。

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

返回值类型:setof text 示例:

SELECT regexp_split_to_table('hello world', E'\\s+');

regexp_split_to_table hello

world (2 rows)

● repeat(string text, number int ) 描述:text

返回值类型:将string重复number次。

示例:

SELECT repeat('Pg', 4);

repeat PgPgPgPg (1 row)

● replace(string text, from text, to text)

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

返回值类型:text 示例:

SELECT replace('abcdefabcdef', 'cd', 'XXX');

replace abXXXefabXXXef (1 row)

● reverse(str)

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

返回值类型:text 示例:

SELECT reverse('abcde');

reverse edcba (1 row)

● right(str text, n int)

描述:返回字符串中的后n个字符。

– ORA和TD兼容模式下,当n是负数时,返回除前|n|个字符以外的所有字符。

– MySQL兼容模式下,当n是负数时,返回空串。

返回值类型:text 示例:

SELECT right('abcde', 2);

right de(1 row)

SELECT right('abcde', -2);

right cde(1 row)

● rpad(string text, length int [, fill text])

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

返回值类型:text 示例:

SELECT rpad('hi', 5, 'xy');

rpad hixyx (1 row)

● rtrim(string text [, characters text])

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

返回值类型:text 示例:

SELECT rtrim('trimxxxx', 'x');

rtrim trim (1 row)

● sys_context ( 'namespace' , 'parameter')

描述:获取并返回指定namespace下参数parameter的值。

返回值类型:text 示例:

SELECT SYS_CONTEXT ( 'postgres' , 'archive_mode');

sys_context ---(1 row)

● substrb(text,int,int)

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

返回值类型:text 示例:

SELECT substrb('string',2,3);

substrb

tri(1 row)

● substrb(text,int)

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

返回值类型:text 示例:

SELECT substrb('string',2);

substrb tring (1 row)

● string || string 描述:连接字符串。

返回值类型:text 示例:

SELECT 'MPP'||'DB' AS RESULT;

result MPPDB (1 row)

● string || non-string或non-string || string 描述:连接字符串和非字符串。

返回值类型:text 示例:

SELECT 'Value: '||42 AS RESULT;

result Value: 42 (1 row)

● split_part(string text, delimiter text, field int)

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

返回值类型:text 示例:

SELECT split_part('abc~@~def~@~ghi', '~@~', 2);

split_part def(1 row)

● strpos(string, substring)

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

返回值类型:int 示例:

SELECT strpos('source', 'rc');

strpos 4 (1 row)

● to_hex(number int or bigint)

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

返回值类型:text 示例:

SELECT to_hex(2147483647);

to_hex 7fffffff (1 row)

● translate(string text, from text, to text)

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

返回值类型:text 示例:

SELECT translate('12345', '143', 'ax');

translate a2x5 (1 row)

● length(string)

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

返回值类型:integer 示例:

SELECT length('abcd');

length 4 (1 row)

● lengthb(string)

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

返回值类型:integer 示例:

SELECT lengthb('Chinese');

lengthb 7 (1 row)

● substr(string,from) 描述:

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

from表示抽取的起始位置。

– from为0时,按1处理。

– from为正数时,抽取从from到末尾的所有字符。

– from为负数时,抽取字符串的后n个字符,n为from的绝对值。

返回值类型:varchar 示例:

from为正数时:

SELECT substr('ABCDEF',2);

substr

BCDEF (1 row)

from为负数时:

SELECT substr('ABCDEF',-2);

substr EF(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为正数时:

SELECT substr('ABCDEF',2,2);

substr BC(1 row)

from为负数时:

SELECT substr('ABCDEF',-3,2);

substr DE(1 row)

● substrb(string,from)

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

返回值类型:bytea 示例:

SELECT substrb('ABCDEF',-2);

substrb EF(1 row)

● substrb(string,from,count)

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

返回值类型:bytea 示例:

SELECT substrb('ABCDEF',2,2);

substrb BC(1 row)

● trim([leading |trailing |both] [characters] from string)

描述:从字符串string的开头、结尾或两边删除只包含characters中字符(缺省是

描述:从字符串string的开头、结尾或两边删除只包含characters中字符(缺省是