字符串函数和操作符

云原生数据仓库 AnalyticDB PostgreSQL 版兼容PostgreSQL字符串函数和操作符。本文简单列举云原生数据仓库 AnalyticDB PostgreSQL 版兼容的字符串函数和操作符及用法示例。

PostgreSQL字符串函数和操作符的详细使用方法,请参见PostgreSQL官方文档:字符串函数和运算符

SQL字符串函数和操作符

函数名称

返回类型

函数说明

用法示例

示例结果

string||string

text

将两个字符串拼接。

'Post' || 'greSQL'

PostgreSQL

string||non-stringornon-string||string

text

将字符串和非字符串拼接。

'Value: ' || 42

Value: 42

bit_length()

int

获取字符串二进制下总位数。

bit_length('jose')

32

char_length(string) or character_length()

int

获取字符串的总位数。

char_length('jose')

4

lower(string)

text

将字符串转换为小写形式。

lower('TOM')

tom

octet_length(string)

int

计算指定字符串表达式的字节长度。

octet_length('jose')

4

overlay(placingfrom[for])

text

在原始字符串的指定位置替换一段子串。

overlay('Txxxxas' placing 'hom' from 2 for 4)

Thomas

position(in)

int

查找子字符串在另一段字符串中的起始位置。

position('om' in 'Thomas')

3

substring([from] [for])

text

从原始字符串中提取一段子串。

substring('Thomas' from 2 for 3)

hom

substring(from)

text

从原始字符串中提取一段子串,并且可以指定提取的起始位置和长度。

substring('Thomas' from '...$')

mas

substring(fromfor)

text

基于正则表达式从字符串中提取子串。

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

oma

trim([leading | trailing | both] [] from)

text

移除字符串首部、尾部或两端的指定字符。

trim(both 'xyz' from 'yxTomxx')

Tom

trim([leading | trailing | both] [from][,] )

text

移除字符串首部、尾部或两端的空格或指定字符。

trim(both from 'xTomxx', 'x')

Tom

upper()

text

将字符串转换成大写形式。

upper('tom')

TOM

其他字符串函数

函数名称

返回类型

函数说明

用法示例

示例结果

ascii()

int

获取指定字符串中第一段字符的 ASCII 码值。

ascii('x')

120

btrim([,])

text

从字符串的两端移除指定的一组字符。如果未指定字符集合,则默认移除空白字符(如空格、制表符等)。

btrim('xyxtrimyyx', 'xyz')

trim

chr(

text

将指定的整数(假设该整数代表一段ASCII或扩展ASCII字符的编码值)转换成对应的字符。

chr(65)

A

concat([,[, ...] ])

text

将两个或更多个字符串连接成一段字符串。

concat('abcde', 2, NULL, 22)

abcde222

concat_ws(,[,[, ...] ])

text

将多个字符串使用指定的分隔符 sep 连接成一段字符串,并且允许在连接的字符串之间插入一段自定义的分隔符。

concat_ws(',', 'abcde', 2, NULL, 22)

abcde,2,22

convert(,,)

bytea

将字符串转换为dest_encoding,原始编码由src_encoding指定。

convert('text_in_utf8', 'UTF8', 'LATIN1')

用Latin-1 encoding (ISO 8859-1) 表示的text_in_utf8

convert_from(,)

text

将二进制数据(bytea 类型)转换为文本字符串,转换时会使用指定的源字符编码(src_encoding_name)。

convert_from('text_in_utf8', 'UTF8')

用当前数据库编码表示的text_in_utf8

convert_to(,)

bytea

将文本字符串转换为二进制数据(bytea 类型),转换时采用指定的目标字符编码(dest_encoding_name)。

convert_to('some text', 'UTF8')

用UTF8编码表达的some text

decode(,)

bytea

将十六进制字符串(表示为文本)解码为其二进制表示形式(bytea 类型)。

decode('MTIzAAE=', 'base64')

\x3132330001

encode(,)

text

将二进制数据(bytea 类型)编码为特定格式的文本字符串。

encode('123\000\001', 'base64')

MTIzAAE=

format([,[, ...] ])

text

格式化字符串输出。

format('Hello %s, %1$s', 'World')

Hello World, World

initcap()

text

将字符串中每个单词的首字母转换为大写,而其余字母转换为小写。

initcap('hi THOMAS')

Hi Thomas

left(,)

text

从一段指定的字符串(str)的开始位置提取指定数量(n)的字符。

left('abcde', 2)

ab

length()

int

计算指定字符串中字符的数量,包括空格和特殊字符。

length('jose')

4

length(,)

int

计算string在指定编码中的字符数。

length('jose', 'UTF8')

4

lpad(,[,])

text

在字符串的左侧填充指定的字符直到达到指定的长度

lpad('hi', 5, 'xy')

xyxhi

ltrim([,])

text

从字符串的左侧移除指定的字符。如果不指定字符集,则默认移除空白字符(如空格、制表符、换行符等)。

ltrim('zzzytest', 'xyz')

test

md5()

text

计算输入字符串的MD5散列值。

md5('abc')

900150983cd24fb0 d6963f7d28e17f72

parse_ident([,DEFAULT true ] )

text[]

解析一段符合SQL标识符规则的字符串,并将其分解成一个模式和一个对象名。

parse_ident('"SomeSchema".someTable')

{SomeSchema,sometable}

pg_client_encoding()

name

获取当前会话的客户端字符编码设置。

pg_client_encoding()

SQL_ASCII

quote_ident()

text

将指定的字符串转换为一段可以在SQL语句中安全使用的标识符。

quote_ident('Foo bar')

"Foo bar"

quote_literal()

text

强制转换指定值为文本类型,并且用引号包围。

quote_literal(E'O\'Reilly')

'O''Reilly'

quote_literal(valueanyelement)

text

强制转换指定值为文本类型,并且用引号包围。

quote_literal(42.5)

'42.5'

quote_nullable()

text

强制转换指定值为文本类型,并且用引号包围。如果参数为空,则返回NULL

quote_nullable(NULL)

NULL

quote_nullable()

text

指定值可以为任何类型,并且用引号包围。

quote_nullable(42.5)

'42.5'

regexp_match(,[,])

text[]

执行正则表达式匹配。此函数在指定的字符串中搜索与指定模式匹配的子串,并返回匹配的结果数组。如果有多个匹配项,每个匹配都会作为一个元素返回。如果没有匹配项,则返回 NULL。

regexp_match('foobarbequebaz', '(bar)(beque)')

{bar,beque}

regexp_matches(,[,])

setof text[]

执行正则表达式匹配。此函数在指定的字符串中搜索与指定模式匹配的子串,并返回所有匹配的结果。

regexp_matches('foobarbequebaz', 'ba.', 'g')

{bar}

{baz}

(2 rows)

regexp_replace(,,[,])

text

替换匹配POSIX正则表达式的子串。

regexp_replace('Thomas', '.[mN]a.', 'M')

ThM

regexp_split_to_array(,[,])

text[]

使用POSIX正则表达式作为分隔符划分字符串。

regexp_split_to_array('hello world', '\s+')

{hello,world}

regexp_split_to_table(,[,])

setof text

使用POSIX正则表达式作为分隔符划分字符串。

regexp_split_to_table('hello world', '\s+')

hello

world

(2 rows)

repeat(,))

text

重复指定的字符串指定的次数。

repeat('Pg', 4)

PgPgPgPg

replace(,,)

text

在指定的字符串中查找指定的子串并替换为另一段指定的子串。

replace('abcdefabcdef', 'cd', 'XX')

abXXefabXXef

reverse()

text

反转指定字符串中的字符顺序。

reverse('abcde')

edcba

right(,)

text

从指定的字符串(str)中提取最右边的n个字符。

right('abcde', 2)

de

rpad(,[,])

text

在字符串的右侧填充指定的字符,直到达到指定的总长度。

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

hixyx

rtrim([,])

text

删除字符串末尾的指定字符或空白字符。

rtrim('testxxzx', 'xyz')

test

split_part(,,)

text

将字符串按照指定的分隔符分割。

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

def

strpos(,)

int

查找子字符串 substring 在字符串 string 中第一次出现的位置。

strpos('high', 'ig')

2

substr(,[,])

text

从原始字符串中提取子串。

substr('alphabet', 3, 2)

ph

starts_with(,)

bool

如果stringprefix开始则返回真。

starts_with('alphabet', 'alph')

t

to_ascii([,])

text

string从另一段编码转换到ASCII(只支持LATIN1LATIN2LATIN9WIN1250编码的转换)。

to_ascii('Karel')

Karel

to_hex(or)

text

将整数(integer)或大整数(bigint)类型的数值转换为其对应的十六进制字符串表示。

to_hex(2147483647)

7fffffff

translate(,,)

text

将字符串中的某些字符替换为另一些字符。

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

a2x5