本节描述用于检查和操作字符串值的函数和运算符。此处的字符串包括 character
、character varying
和 text
类型的值。除非另有说明,这些函数和运算符声明为接受并返回 text
类型。它们可以互换地接受 character varying
参数。类型为 character
的值在函数或运算符应用之前会转换为 text
,这将导致 character
值中所有尾随空格被去除。
SQL定义了一些使用关键字而不是逗号来分隔参数的字符串函数。详情请参见表 9.9。PostgreSQL 还提供了使用常规函数调用语法(参见表 9.10)的这些函数的版本。
字符串连接运算符 (||
) 将接受非字符串输入,只要至少有一个输入是字符串类型,如表 9.9所示。对于其他情况,插入显式强制转换为 text
可用于接受非字符串输入。
表 9.9. SQL字符串函数和运算符
函数/运算符 描述 示例 |
---|
连接两个字符串。
|
将非字符串输入转换为文本,然后连接两个字符串。(非字符串输入不能是数组类型,因为那会与数组
|
从
|
检查字符串是否处于指定的 Unicode 规范化形式。可选的
|
返回字符串中的位数(
|
返回字符串中的字符数。
|
根据数据库区域设置的规则将字符串转换为小写。
|
通过在
|
从
|
将字符串转换为指定的 Unicode 规范化形式。可选的
|
返回字符串中的字节数。
|
返回字符串中的字节数。由于此版本的函数直接接受
|
将
|
返回指定
|
通过在
|
从
|
提取
|
提取与 POSIX 正则表达式匹配的第一个子字符串;参见第 9.7.3 节。
|
提取匹配的第一个子字符串SQL正则表达式;参见第 9.7.2 节。第一种形式自 SQL:2003 以来已指定;第二种形式仅在 SQL:1999 中,应被视为已过时。
|
从
|
这是
|
如果字符串中的所有字符都是已分配的 Unicode 代码点,则返回 |
根据数据库区域设置的规则将字符串转换为大写。
|
还有其他字符串操作函数和运算符,列在表 9.10中。(其中一些在内部用于实现SQL-标准字符串函数,列在表 9.9中。)还有模式匹配运算符,在第 9.7 节中描述,以及用于全文搜索的运算符,在第 12 章中描述。
表 9.10. 其他字符串函数和运算符
函数/运算符 描述 示例 |
---|
如果第一个字符串以第二个字符串开头,则返回 true(等效于
|
返回参数第一个字符的数字代码。在UTF8编码中,返回字符的 Unicode 代码点。在其他多字节编码中,参数必须是ASCII字符。
|
返回具有给定代码的字符。在UTF8编码中,参数被视为 Unicode 代码点。在其他多字节编码中,参数必须指定一个ASCII字符。
|
连接所有参数的文本表示。NULL 参数将被忽略。
|
连接除第一个参数外的所有参数,并使用分隔符。第一个参数用作分隔字符串,不应为 NULL。其他 NULL 参数将被忽略。
|
根据格式字符串格式化参数;参见第 9.4.1 节。此函数类似于 C 函数
|
将每个单词的首字母转换为大写,其余转换为小写。单词是字母数字字符序列,由非字母数字字符分隔。
|
根据排序规则对输入字符串执行大小写折叠。大小写折叠类似于大小写转换,但大小写折叠的目的是方便字符串的不区分大小写匹配,而大小写转换的目的是转换为特定的大小写形式。此函数只能在服务器编码为 通常,大小写折叠只是转换为小写,但根据排序规则可能会有例外。例如,某些字符有两个以上的小写变体,或者折叠为大写。 大小写折叠可能会改变字符串的长度。例如,在
|
返回字符串中的前
|
返回字符串中的字符数。
|
计算参数的 MD5 哈希值,结果以十六进制表示。
|
将
|
返回当前客户端编码名称。
|
返回给定字符串,并适当引用,以便在SQL语句字符串中用作标识符。仅在必要时(即,如果字符串包含非标识符字符或将被大小写折叠)才添加引号。嵌入的引号会正确地加倍。另请参见示例 41.1。
|
返回给定字符串,并适当引用,以便在SQL语句字符串中用作字符串文字。嵌入的单引号和反斜杠会正确地加倍。请注意,
|
将给定值转换为文本,然后将其作为文字引用。嵌入的单引号和反斜杠会正确地加倍。
|
返回给定字符串,并适当引用,以便在SQL语句字符串;或者,如果参数为空,则返回
|
将给定值转换为文本,然后将其作为文字引用;或者,如果参数为空,则返回
|
返回 POSIX 正则表达式
|
返回 POSIX 正则表达式
|
检查 POSIX 正则表达式
|
返回与 POSIX 正则表达式
|
返回 POSIX 正则表达式
{bar} {baz} |
替换与 POSIX 正则表达式
|
替换与 POSIX 正则表达式
|
使用 POSIX 正则表达式作为分隔符分割
|
使用 POSIX 正则表达式作为分隔符分割
hello world |
返回
|
将
|
将
|
反转字符串中字符的顺序。
|
返回字符串中的后
|
在
|
如果
|
在
|
在
xx NULL zz |
返回指定
|
提取
|
将
|
将数字转换为其等效的二进制补码表示。
|
将数字转换为其等效的二进制补码十六进制表示。
|
将数字转换为其等效的二进制补码八进制表示。
|
将
|
评估参数中的转义 Unicode 字符。Unicode 字符可以指定为 如果服务器编码不是 UTF-8,则由这些转义序列之一标识的 Unicode 代码点将转换为实际的服务器编码;如果无法转换,则报告错误。 此函数提供了字符串常量带 Unicode 转义序列的(非标准)替代方案(参见第 4.1.2.3 节)。
|
concat
、concat_ws
和 format
函数是变长参数函数,因此可以将要连接或格式化的值作为标记有 VARIADIC
关键字的数组传递(参见第 36.5.6 节)。数组的元素被视为函数的独立普通参数。如果变长数组参数为 NULL,则 concat
和 concat_ws
返回 NULL,但 format
将 NULL 视为零元素数组。
另请参见第 9.21 节中的聚合函数 string_agg
,以及表 9.13中用于字符串和 bytea
类型之间转换的函数。
format
#函数 format
以类似于 C 函数 sprintf
的样式,根据格式字符串生成输出。
format
(formatstr
text
[,formatarg
"any"
[, ...] ])
formatstr
是一个格式字符串,它指定结果应如何格式化。格式字符串中的文本直接复制到结果中,但使用格式说明符的地方除外。格式说明符充当字符串中的占位符,定义后续函数参数应如何格式化并插入到结果中。每个 formatarg
参数根据其数据类型的常规输出规则转换为文本,然后根据格式说明符进行格式化并插入到结果字符串中。
格式说明符以 %
字符开头,形式为
%[position
][flags
][width
]type
其中组成字段是
position
(可选)形式为
的字符串,其中 n
$n
是要打印的参数的索引。索引 1 表示 formatstr
之后的第一个参数。如果省略 position
,则默认使用序列中的下一个参数。
flags
(可选)控制格式说明符输出格式的其他选项。目前唯一支持的标志是负号 (-
),它将导致格式说明符的输出左对齐。除非还指定了 width
字段,否则这无效。
width
(可选)指定用于显示格式说明符输出的最小字符数。根据需要(取决于 -
标志),用空格在左侧或右侧填充输出以达到宽度。过小的宽度不会导致输出截断,而是简单地被忽略。宽度可以使用以下任何一种方式指定:一个正整数;一个星号 (*
) 以使用下一个函数参数作为宽度;或形式为 *
的字符串以使用第 n
$n
个函数参数作为宽度。
如果宽度来自函数参数,则该参数会在用于格式说明符值的参数之前被消耗。如果宽度参数为负数,则结果将左对齐(如同指定了 -
标志一样),在长度为 abs
(width
) 的字段内。
type
(必需)用于生成格式说明符输出的格式转换类型。支持以下类型
s
将参数值格式化为简单字符串。NULL 值被视为空字符串。
I
将参数值视为 SQL 标识符,必要时加双引号。值为 NULL 是一个错误(等同于 quote_ident
)。
L
将参数值作为 SQL 文字引用。NULL 值显示为字符串 NULL
,不带引号(等同于 quote_nullable
)。
除了上述格式说明符之外,特殊序列 %%
可用于输出文字 %
字符。
以下是一些基本格式转换的示例
SELECT format('Hello %s', 'World'); Result:Hello World
SELECT format('Testing %s, %s, %s, %%', 'one', 'two', 'three'); Result:Testing one, two, three, %
SELECT format('INSERT INTO %I VALUES(%L)', 'Foo bar', E'O\'Reilly'); Result:INSERT INTO "Foo bar" VALUES('O''Reilly')
SELECT format('INSERT INTO %I VALUES(%L)', 'locations', 'C:\Program Files'); Result:INSERT INTO locations VALUES('C:\Program Files')
以下是使用 width
字段和 -
标志的示例
SELECT format('|%10s|', 'foo'); Result:| foo|
SELECT format('|%-10s|', 'foo'); Result:|foo |
SELECT format('|%*s|', 10, 'foo'); Result:| foo|
SELECT format('|%*s|', -10, 'foo'); Result:|foo |
SELECT format('|%-*s|', 10, 'foo'); Result:|foo |
SELECT format('|%-*s|', -10, 'foo'); Result:|foo |
这些示例显示了 position
字段的使用
SELECT format('Testing %3$s, %2$s, %1$s', 'one', 'two', 'three'); Result:Testing three, two, one
SELECT format('|%*2$s|', 'foo', 10, 'bar'); Result:| bar|
SELECT format('|%1$*2$s|', 'foo', 10, 'bar'); Result:| foo|
与标准 C 函数 sprintf
不同,PostgreSQL 的 format
函数允许在同一格式字符串中混合使用带和不带 position
字段的格式说明符。不带 position
字段的格式说明符始终使用上次消耗参数之后的下一个参数。此外,format
函数不要求所有函数参数都在格式字符串中使用。例如
SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
Result: Testing three, two, three
%I
和 %L
格式说明符对于安全地构建动态 SQL 语句特别有用。参见示例 41.1。
如果您在文档中发现任何不正确、与您使用特定功能的经验不符或需要进一步澄清的内容,请使用此表单报告文档问题。