4.4. 字符串函数和操作符

本节描述了用于检查和操作字符串数值的函数和操作符. 在这个环境中的字串包括所有类型 CHARACTERCHARACTER VARYING,和 TEXT 的值.除非另外说明,所有下面列出的函数都可以处理这些类型, 不过要小心的是,在使用 CHARACTER 类型的时候, 它的自动填充的潜在影响.通常这里描述的函数也能用于非字串 类型,此时它首先把那些数据转化为字串表现形式. 有些函数还可以处理位串类型.

SQL 定义了一些字串函数, 它们有指定的语法,它们里面是用 某种特定的关键字,而不是逗号来分隔参数. 详情请见Table 4-6, 这些函数也用正常的函数调用说法实现了. (参阅 Table 4-7.)

Table 4-6. SQL 字串函数和操作符

函数返回类型描述例子结果
string || string text 字串连接'Postgre' || 'SQL'PostgreSQL
char_length(string) or character_length(string)integer字串长度char_length('jose')4
lower(string)text把字串转化为小写lower('TOM')tom
octet_length(string)integer字串中的字节数octet_length('jose')4
position(substring in string)integer声明的子字串的位置position('om' in 'Thomas')3
substring(string [from integer] [for integer])text抽取子字串substring('Thomas' from 2 for 3)oma
trim([leading | trailing | both] [characters] from string) text 从字串 string 的 开头/结尾/两边/ 删除只包含 characters (缺省是一个空白)的最长的字串. trim(both 'x' from 'xTomx')Tom
upper(string)text把字串转化为大写.upper('tom')TOM

还有额外的字串操作函数可以用,它们在下面列出. 它们有些在内部用于实现上面列出的SQL字串函数.

Table 4-7. 其他函数

函数返回类型描述例子结果
ascii(text)integer返回参数第一个字符的 ASCIIascii('x')120
btrim(string text, trim text)textstring 开头和结尾删除 只包含在 trim 里的字符的最长字串. btrim('xyxtrimyyx','xy')trim
chr(integer)text返回给出 ASCII 码的字符chr(65)A
initcap(text)text把每个单词(空白分隔)的第一个子母转为大写initcap('hi thomas')Hi Thomas
lpad(string text, length integer [, fill text]) text 通过填充字符 fill (缺省时为空白), 把 string 填充为长度 length. 如果 string 已经比 length 长则将其截断(在右边). lpad('hi', 5, 'xy')xyxhi
ltrim(string text, trim text)text 从字串 string 的 开头 删除只包含 trim 的最长的字串. ltrim('zzzytrim','xyz')trim
repeat(text, integer)text重复 text 一定次数.repeat('Pg', 4)PgPgPgPg
rpad(string text, length integer [, fill text]) text 通过填充字符 fill (缺省时为空白), 把 string 填充为长度 length. 如果 string 已经比 length 长则将其截断. rpad('hi', 5, 'xy')hixyx
rtrim(string text, trim text)text 从字串 string 的 结尾 删除只包含 trim 的最长的字串. rtrim('trimxxxx','x')trim
strpos(string, substring)text 定位声明的子字串.(和 position(substring in string一样),不过要注意参数顺序 是相反的) strpos('high','ig')2
substr(string, from [, count])text 抽取声明的子字串.(和 substring(string from from for count)一样) substr('alphabet', 3, 2)ph
to_ascii(text [, encoding])text把多字节文本编码转换为 ASCIIto_ascii('Karel') 
translate(string text, from text, to text) text 把在 string 中包含的任何匹配 from 中的字符的字符转化为对应的 在 to 中的字符. translate('12345', '14', 'ax')a23x5

to_ascii 函数支持从 LATIN1,LATIN, WIN1250(CP1250)的转化.