历史版本。 PostgreSQL 7.1 已结束支持。 请参阅 当前版本手册.
4.4. 字符串函数和操作符 #
本节描述用于检查和操作字符串值的函数和操作符。这里的字符串包括
CHARACTER、CHARACTER VARYING 和 TEXT 所有类型的值。除非另有说明,下面列出的所有函数都适用于这些类型,但使用 CHARACTER 类型时,应注意自动填充空格可能带来的影响。通常,这里描述的函数也能用于非字符串类型的数据,方法是先把该数据转换为字符串表示。一些函数也为位串类型提供了原生实现。
SQL定义了一些字符串函数,它们使用特殊语法,其中用某些关键字而不是逗号来分隔参数。详情见表 4.6。这些函数也使用常规的函数调用语法实现(见表 4.7)。
表 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 | 移除字符串开始端/结束端/两端(默认为两端)仅含指定字符(默认为空格)的最长字符串。 | trim(both 'x' from 'xTomx') | Tom |
upper(string) | text | 把字符串转换为大写。 | upper('tom') | TOM |
下面还有一些其他的字符串处理函数。其中一些在内部用于实现上面列出的 SQL 字符串函数。
表 4.7. 其他字符串函数
| 函数 | 返回类型 | 描述 | 示例 | 结果 |
|---|---|---|---|---|
ascii(text) | integer | 返回参数第一个字符的 ASCII 码。 | ascii('x') | 120 |
btrim(string text, trim text) | text | 移除string开头和结尾处仅由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 | 在 string 的前面添加字符
fill(默认为空格)把它填充到
length 长度。如果
string 已经超过
length,则把它截断(在右边)。
| lpad('hi', 5, 'xy') | xyxhi |
ltrim(string text, trim text) | text | 移除字符串开头处仅由trim中的字符组成的最长字符串。
| ltrim('zzzytrim', 'xyz') | trim |
repeat(text, integer) | text | 将文本重复指定次数。 | repeat('Pg', 4) | PgPgPgPg |
rpad(string text,
length integer
[, fill text])
| text | 在 string 的后面添加字符
fill(默认为空格)把它填充到
length 长度。如果
string 已经超过
length,则把它截断。
| rpad('hi', 5, 'xy') | hixyx |
rtrim(string text, trim text) | text | 移除字符串结尾处仅由trim中的字符组成的最长字符串。
| rtrim('trimxxxx', 'x') | trim |
strpos(string, substring) | text | 定位指定子串(与
position( 相同,但注意参数顺序相反)
| strpos('high', 'ig') | 2 |
substr(string, from [, count]) | text | 提取指定的子串(与 substring( 相同)。
| substr('alphabet', 3, 2) | ph |
to_ascii(text [, encoding]) | text | 把文本从多字节编码转换为 ASCII。 | to_ascii('Karel') | Karel |
translate(string text,
from text,
to text)
| text | string中任何与from集合中字符匹配的字符,都会被替换成to集合中的相应字符。
| translate('12345', '14', 'ax') | a23x5 |
to_ascii 函数只支持从
LATIN1、LATIN2、WIN1250(CP1250)转换。