字符处理函数和操作符
Vastbase提供的字符处理函数和操作符主要用于字符串与字符串、字符串与非字符串之间的连接,以及字符串的模式匹配操作。
字符串处理函数除了length相关函数,其他函数和操作符不支持大于1GB的clob作为参数。
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)
描述:instr(string1,string2,int1,int2)返回在string1中从int1位置开始匹配到第int2次string2的位置,第一个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个字符。当n是负数时,返回除最后
|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)
如果是查询bytea类型的长度,指定utf8编码时,最大长度只能为536870888。
lpad(string text, length int [, fill text])
描述:通过填充字符fill(缺省时为空白),把string填充为length长度。如果string已经比length长则将其尾部截断。
返回值类型:text
示例:
SELECT lpad('hi', 5, 'xyza');
返回结果为:
lpad ------- xyzhi (1 row)
notlike(x bytea name text, y bytea text)
描述:比较x和y是否不一致。
返回值类型:bool
示例1:
SELECT notlike(1,2);
返回结果为:
notlike -------------- t (1 row)
示例2:
SELECT notlike(1,1);
返回结果为:
notlike -------------- f (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,字符串不存在时返回0。
示例:
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
示例:
(1)基本用法:
SELECT quote_literal('hello');
返回结果为:
quote_literal --------------- 'hello' (1 row)
(2)如果出现如下写法,text文本将进行转义。
SELECT quote_literal(E'O\'hello');
返回结果为:
quote_literal --------------- 'O''hello' (1 row)
(3)如果出现如下写法,反斜杠会写入两次。
SELECT quote_literal('O\hello');
返回结果如下:
quote_literal --------------- E'O\\hello' (1 row)
(4)如果参数为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_inner(string [from int] [for int])
描述:截取子字符串,from int表示从第几个字符开始截取,for int表示截取几个字节。
返回值类型:text
示例:
select substring_inner('adcde', 2,3);
返回结果为:
substring_inner ----------------- dcd (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
示例1:
SELECT substring('Thomas' from '...$');
返回结果为:
substring ----------- mas (1 row)
示例2:
SELECT substring('foobar' from 'o(.)b');
返回结果为:
result -------- o (1 row)
示例3:
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(string text, pattern text [, position int [, occurrence int [, flags text]]])
描述:正则表达式的抽取子串函数。与substr功能相似,正则表达式出现多个并列的括号时,也全部处理。
参数说明:
string:用于匹配的源字符串。
pattern:用于匹配的正则表达式模式串。
position:可选参数,表示从源字符串的第几个字符开始匹配,默认值为1。
occurrence:可选参数,表示抽取第几个满足匹配的子串,为,默认值为1。
flags:可选参数,包含零个或多个改变函数匹配行为的单字母标记。flags支持的选项值及含义描述如下表1所示:
表 1 flag支持的选项值及含义描述
选项 描述 'b' 按照无扩展的 BRE 规则匹配。 'c' 大小写敏感匹配。 'e' 按照扩展的ERE规则匹配。 'i' 大小写不敏感匹配。 'm' 多行模式匹配。flags中包含'm'时,按照多行模式匹配,否则按照单行模式匹配。 'n' n 选项的含义和GUC参数behavior_compat_options及数据库当前的兼容模式有关。数据库SQL语法兼容模式为A或B,且GUC参数behavior_compat_options值包含aformat_regexp_match时,n选项表示 .
能够匹配换行符('\n'),flags未指定'n'选项时,.
不会匹配换行符。其他情况下,'n' 选项和 'm' 选项的含义一样。'p' 部分新行敏感的匹配,影响.和方括号表达式,和新行敏感的匹配(‘m’或‘n’)一样,但是不影响^和$。 'q' 普通字符匹配。 's' 单行模式匹配,含义与 m, n 相反。 't' 紧凑模式匹配,空白符匹配自身。 'w' 逆部分新行匹配。与p含义相反。 'x' 宽松模式匹配,忽略空白符。 'g' 匹配所有实例。
返回值类型:text
示例1:SELECT regexp_substr('str','[ac]');
返回结果为:
regexp_substr --------------- (1 row)
示例2:
SELECT regexp_substr('foobarbaz', 'b(..)', 3, 2) AS RESULT;
返回结果为:
result -------- baz (1 row)
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,g。
返回值类型:int
示例:
SELECT regexp_count('foobarbaz','b(..)', 5) AS RESULT;
返回结果为:
result -------- 1 (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:
SELECT regexp_instr('foobarbaz','b(..)', 1, 1, 0) AS RESULT;
返回结果为:
result -------- 4 (1 row)
示例2:
SELECT regexp_instr('foobarbaz','b(..)', 1, 2, 0) AS RESULT;
返回结果为:
result -------- 7 (1 row)
regexp_matches(string text, pattern text [, flags text])
描述:返回string中所有匹配POSIX正则表达式的子字符串。如果pattern不匹配,该函数不返回行。如果模式不包含圆括号子表达式,则每一个被返回的行都是一个单一元素的文本数组,其中包括匹配整个模式的子串。如果模式包含圆括号子表达式,该函数返回一个文本数组,它的第n个元素是匹配模式的第n个圆括号子表达式的子串。
flags参数为可选参数,包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。
如果提供了最后一个参数,但参数值是空字符串(
''
),且数据库SQL兼容模式设置为Oracle兼容模式的情况下,会导致返回结果为空集。这是因为Oracle兼容模式将''
作为NULL处理,避免此类行为的方式有如下几种:将数据库SQL兼容模式改为“C”,即Teradata兼容模式。
不提供最后一个参数,或最后一个参数不为空字符串。
返回值类型:setof text[]
示例1:
SELECT regexp_matches('foobarbequebaz', '(bar)(beque)');
返回结果为:
regexp_matches ---------------- {bar,beque} (1 row)
示例2:
SELECT regexp_matches('foobarbequebaz', 'barbeque');
返回结果为:
regexp_matches ---------------- {barbeque} (1 row)
示例3:
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表示进行大小写无关的匹配。
返回值类型:setof text
示例:
SELECT regexp_split_to_table('hello world', E'\\s+');
返回结果为:
regexp_split_to_table ----------------------- hello world (2 rows)
repeat(string text, number int)
描述:将string重复number次。
返回值类型:text。
示例:
SELECT repeat('Pg', 4);
返回结果为:
repeat ---------- PgPgPgPg (1 row)
由于数据库内存分配机制限制单次内存分配不可超过1GB,因此number最大值不应超过
(1G-x)/lengthb(string) - 1
。x为头信息长度,通常大于4字节,其具体值在不同的场景下存在差异。replace(string text, from text, to text)
描述:把字符串string里出现地所有子字符串from的内容替换成子字符串to的内容。
返回值类型:text
示例:
SELECT replace('abcdefabcdef', 'cd', 'XXX');
返回结果为:
replace ---------------- abXXXefabXXXef (1 row)
replace(string, substring)
描述:删除字符串string里出现的所有子字符串substring的内容。
string类型:text
substring类型:text
返回值类型:text
示例:
SELECT replace('abcdefabcdef', 'cd');
返回结果为:
replace ---------------- abefabef (1 row)
reverse(str)
描述:返回颠倒的字符串。
返回值类型:text
示例:
SELECT reverse('abcde');
返回结果为:
reverse --------- edcba (1 row)
right(str text, n int)
描述:返回字符串中的后n个字符。当n是负值时,返回除前
|n|
个字符以外的所有字符。返回值类型:text
示例1:
SELECT right('abcde', 2);
返回结果为:
right ------- de (1 row)
示例2:
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)
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)
substr(bytea,from,count)
描述:从参数bytea中抽取子字符串。from表示抽取的起始位置,count表示抽取的子字符串长度。
返回值类型:text
示例:
SELECT substr('string',2,3);
返回结果为:
substr -------- tri (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 [,count])
描述:从参数string中抽取子字符串;from表示抽取的起始位置;count表示抽取的子字符串长度。
返回值类型:varchar
该函数在不同兼容模式下,表现略有不同,具体如下所示:
在Oracle(A)兼容模式下:
- from为0时,按1处理。
- from为正数时,抽取从from到末尾的所有字符。
- from为负数时,抽取字符串的后n个字符,n为from的绝对值。
- count小于1时,返回null。
在MySQL(B)兼容模式下:
- from为0时,返回空。
- from为正数时,抽取从from到末尾的所有字符。
- from为负数时,抽取字符串的后n个字符,n为from的绝对值。
- count小于1时,返回null。
在sqlserver(MSSQL)、TD(C)、PostgreSQL(PG)兼容模式下:
- from为0时,按1处理。
- from为正数时,抽取从from到末尾的所有字符。
- from为负数时,按1处理。
- count小于1时,返回null。
示例:以下示例以Oracle兼容模式为例
from为正数时:
SELECT substr('ABCDEF',2); SELECT substr('ABCDEF',2,2);
返回结果为:
substr -------- BCDEF (1 row) substr -------- BC (1 row)
from为负数时:
SELECT substr('ABCDEF',-2); SELECT substr('ABCDEF',-3,2);
返回结果为:
substr -------- EF (1 row) 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中字符(缺省是一个空白)的最长的字符串。
返回值类型:text
示例1:
SELECT trim(BOTH 'x' FROM 'xTomxx');
返回结果为:
btrim ------- Tom (1 row)
示例2:
SELECT trim(LEADING 'x' FROM 'xTomxx');
返回结果为:
ltrim ------- Tomxx (1 row)
示例3:
SELECT trim(TRAILING 'x' FROM 'xTomxx');
返回结果为:
rtrim ------- xTom (1 row)
rtrim(string [, characters])
描述:从字符串string的结尾删除只包含characters中字符(缺省是个空白)的最长的字符串。
返回值类型:text
示例:
SELECT rtrim('TRIMxxxx','x');
返回结果为:
rtrim ------- TRIM (1 row)
ltrim(string [, characters])
描述:从字符串string的开头删除只包含characters中字符(缺省是一个空白)的最长的字符串。
返回值类型:text
示例:
SELECT ltrim('xxxxTRIM','x');
返回结果为:
ltrim ------- TRIM (1 row)
-
描述:把字符串转化为大写。
返回值类型:text
示例:
SELECT upper('tom');
返回结果为:
upper ------- TOM (1 row)
-
描述:把字符串转化为小写。
Vastbase G100 V2.2 Build 10(Patch No.12)及以后补丁版本LOWER函数入参支持UUID类型。
返回值类型:text
示例:
SELECT lower('TOM'); select lower('A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11'::uuid); SELECT lower(sys_guid()) ;
返回结果为:
lower ------- tom (1 row) lower ---------------------------------- a0eebc999c0b4ef8bb6d6bb9bd380a11 (1 row) lower ---------------------------------- a0eebc999c0b4ef8bb6d6bb9bd380a11 (1 row) lower ---------------------------------- 00000000650ba5890000000000000002 (1 row)
rpad(string varchar, length int [, fill varchar])
描述:使用填充字符fill(缺省时为空白),把string填充到length长度。如果string已经比length长则将其从尾部截断。
length参数在vastbase中表示字符长度。一个汉字长度计算为一个字符。
返回值类型:varchar
示例1:
SELECT rpad('hi',5,'xyza');
返回结果为:
rpad ------- hixyz (1 row)
示例2:
SELECT rpad('hi',5,'abcdefg');
返回结果为:
rpad ------- hiabc (1 row)
instr(string,substring[,position,occurrence])
描述:从字符串string的position(缺省时为1)所指的位置开始查找并返回第occurrence(缺省时为1)次出现子串substring的位置的值。
- 当position为0时,返回0。
- 当position为负数时,从字符串倒数第n个字符往前逆向搜索。n为position的绝对值。
本函数以字符为计算单位,如一个汉字为一个字符。
返回值类型:integer
示例1:
SELECT instr('corporate floor','or', 3);
返回结果为:
instr ------- 5 (1 row)
示例2:
SELECT instr('corporate floor','or',-3,2);
返回结果为:
instr ------- 2 (1 row)
initcap(string)
描述:将字符串中的每个单词的首字母转化为大写,其他字母转化为小写。
返回值类型:text
示例:
SELECT initcap('hi THOMAS');
返回结果为:
initcap ----------- Hi Thomas (1 row)
ascii(string)
描述:参数string的第一个字符的ASCII码。
返回值类型:integer
示例:
SELECT ascii('xyz');
返回结果为:
ascii ------- 120 (1 row)
replace(string varchar, search_string varchar, replacement_string varchar)
描述:把字符串string中所有子字符串search_string替换成子字符串replacement_string。
返回值类型:varchar
示例:
SELECT replace('jack and jue','j','bl');
返回结果为:
replace ---------------- black and blue (1 row)
lpad(string varchar, length int[, repeat_string varchar])
描述:在string的左侧添上一系列的repeat_string(缺省为空白)来组成一个总长度为n的新字符串。
如果string本身的长度比指定的长度length长,则本函数将把string截断并把前面长度为length的字符串内容返回。
返回值类型:varchar
示例1:
SELECT lpad('PAGE 1',15,'*.');
返回结果为:
lpad ----------------- *.*.*.*.*PAGE 1 (1 row)
示例2:
SELECT lpad('hello world',5,'abcd');
返回结果为:
lpad ------- hello (1 row)
concat(str1,str2)
描述:将字符串str1和str2连接并返回。
数据库SQL兼容模式设置为MySQL的情况下,参数str1或str2为NULL会导致返回结果为NULL。
返回值类型:varchar
示例1:
SELECT concat('Hello', ' World!');
返回结果为:
concat -------------- Hello World! (1 row)
示例2:
SELECT concat('Hello', NULL);
返回结果为:
concat -------- Hello (1 row)
chr(integer)
描述:给出ASCII码的字符。
返回值类型:varchar
示例:
SELECT chr(65);
返回结果为:
chr ----- A (1 row)
regexp_substr(source_char, pattern)
描述:正则表达式的抽取子串函数。SQL语法兼容A和B的情况下,GUC参数behavior_compat_options的值包含aformat_regexp_match时,
.
不能匹配 'n' 字符;不包含aformat_regexp_match时,.
能够匹配'n'字符。返回值类型:text
示例:
SELECT regexp_substr('500 Hello World, Redwood Shores, CA', ',[^,]+,') "REGEXPR_SUBSTR";
返回结果为:
REGEXPR_SUBSTR ------------------- , Redwood Shores, (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:
SELECT regexp_replace('Thomas', '.[mN]a.', 'M');
返回结果为:
regexp_replace ---------------- ThM (1 row)
示例2:
SELECT regexp_replace('foobarbaz','b(..)', E'X1Y', 'g') AS RESULT;
返回结果为:
result ------------- fooXarYXazY (1 row)
concat_ws(sep text, str”any” [, str”any” [, …] ])
描述:以第一个参数为分隔符,链接第二个以后的所有参数。NULL参数被忽略。
如果第一个参数值是NULL,会导致返回结果为NULL。
如果第一个参数值是空字符串(
''
),且数据库SQL兼容模式设置为Oracle兼容模式的情况下,会导致返回结果为NULL。这是因为Oracle兼容模式将''
作为NULL处理,避免此类行为,可以将数据库SQL兼容模式改为B(MySQL兼容模式)、C(Teradata兼容模式)或者PG(PostgreSQL兼容模式)。
返回值类型:text
示例:
SELECT concat_ws(',', 'ABCDE', 2, NULL, 22);
返回结果为:
concat_ws ------------ ABCDE,2,22 (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:
SELECT nlssort('A', 'nls_sort=schinese_pinyin_m');
返回结果为:
nlssort ---------------- 01EA0000020006 (1 row)
示例2:
SELECT nlssort('A', 'nls_sort=generic_m_ci');
返回结果为:
nlssort ---------------- 01EA000002 (1 row)
convert(string bytea, src_encoding name, dest_encoding name)
描述:以dest_encoding指定的目标编码方式转化字符串bytea。src_encoding指定源编码方式,在该编码下,string必须是合法的。
返回值类型:bytea
示例:
SELECT convert('text_in_utf8', 'UTF8', 'GBK');
返回结果为:
convert ---------------------------- \x746578745f696e5f75746638 (1 row)
如果源编码格式到目标编码格式的转化规则不存在,则字符串不进行任何转换直接返回,如GBK和LATIN1之间的转换规则是不存在的,具体转换规则可以通过查看系统表pg_conversion获得。
示例1:
show server_encoding;
返回结果为:
server_encoding ----------------- UTF8 (1 row)
示例2:
SELECT convert_from('some text', 'GBK');
返回结果为:
convert_from -------------- some text (1 row)
示例3:
SELECT convert_to('some text', 'GBK');
返回结果为:
convert_to ---------------------- \x736f6d652074657874 (1 row)
示例4:
SELECT convert('some text', 'GBK', 'LATIN1');
返回结果为:
convert ---------------------- \x736f6d652074657874 (1 row)
convert_from(string bytea, src_encoding name)
描述:以数据库的编码方式转化字符串bytea。
src_encoding指定源编码方式,在该编码下,string必须是合法的。
返回值类型:text
示例:
SELECT convert_from('text_in_utf8', 'UTF8');
返回结果为:
convert_from -------------- text_in_utf8 (1 row)
convert_to(string text, dest_encoding name)
描述:将字符串转化为dest_encoding的编码格式。
返回值类型:bytea
示例:
SELECT convert_to('some text', 'UTF8');
返回结果为:
convert_to ---------------------- \x736f6d652074657874 (1 row)
string [NOT] LIKE pattern [ESCAPE escape-character]
描述:模式匹配函数。
如果pattern不包含百分号或者下划线,该模式只代表它本身,这时候LIKE的行为就像等号操作符。在pattern里的下划线(_)匹配任何单个字符;而一个百分号(%)匹配零或多个任何字符。
要匹配下划线或者百分号本身,在pattern里相应的字符必须前导逃逸字符。缺省的逃逸字符是反斜杠,但是用户可以用ESCAPE子句指定一个。要匹配逃逸字符本身,写两个逃逸字符。
返回值类型:Boolean
示例1:
SELECT 'AA_BBCC' LIKE '%A@_B%' ESCAPE '@' AS RESULT;
返回结果为:
result -------- t (1 row)
示例2:
SELECT 'AA_BBCC' LIKE '%A@_B%' AS RESULT;
返回结果为:
result -------- f (1 row)
示例3:
SELECT 'AA@_BBCC' LIKE '%A@_B%' AS RESULT;
返回结果为:
result -------- t (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:
SELECT regexp_like('ABC', '[A-Z]');
返回结果为:
regexp_like ------------- t (1 row)
示例2:
SELECT regexp_like('ABC', '[D-Z]');
返回结果为:
regexp_like ------------- f (1 row)
示例3:
SELECT regexp_like('ABC', '[a-z]','i');
返回结果为:
regexp_like ------------- t (1 row)
format(formatstr text [, str”any” [, …] ])
描述:格式化字符串。
返回值类型:text
示例:
SELECT format('Hello %s, %1$s', 'World');
返回结果为:
format -------------------- Hello World, World (1 row)
md5(string)
描述:将string使用MD5加密,并以16进制数作为返回值。
MD5加密算法安全性低,存在安全风险,不建议使用。
返回值类型:text
示例:
SELECT md5('ABC');
返回结果为:
md5 ---------------------------------- 902fbdd2b1df0c4f70b4a5d23525e932 (1 row)
decode(string text, format text)
描述:将二进制数据从文本数据中解码。
返回值类型:bytea
示例:
SELECT decode('MTIzAAE=', 'base64');
返回结果为:
decode -------------- \x3132330001 (1 row)
similar_escape(pat text, esc text)
描述:将一个 SQL:2008风格的正则表达式转换为POSIX风格。
返回值类型:text
示例:
select similar_escape('s+ab','2');
返回结果为:
similar_escape ---------------- ^(?:s+ab)$ (1 row)
encode(data bytea, format text)
描述:将二进制数据编码为文本数据。
返回值类型:text
示例:
SELECT encode(E'123\\000\\001', 'base64');
返回结果为:
encode ---------- MTIzAAE= (1 row)
若字符串中存在换行符,如字符串由一个换行符和一个空格组成,在vastbase中LENGTH和LENGTHB的值为2。
对于CHAR(n) 类型,vastbase中n是指字符个数。因此,对于多字节编码的字符集, LENGTHB函数返回的长度可能大于n。
Vastbase支持多种类型的数据库,目前有4种:A类型、B类型、C类型以及PG类型,分别代表Oracle、MySQL、Teradata、PostgreSQL四种不同的兼容模式。在不指定数据库类型时,Vastbase默认为A类型(Oracle兼容模式)。
Oracle兼容模式的词法分析器与另外三种不一样,在Oracle兼容模式中,空字符串会被当作是NULL。所以,当使用Oracle兼容模式的数据库时,假如上述字符操作函数中有空字符串作为参数,会出现没有输出的情况。例如:
SELECT translate('12345','123','');
返回结果为:
translate ----------- (1 row)
这是因为内核在调用相应的函数进行处理前,会判断所输入的参数中是否含有NULL,假如有,则不会调用相应的函数,因此会没有输出。而在PG模式下,字符串的处理方式与PostgreSQL保持一致,因此不会有上述问题产生。