本节介绍用于检查和操作字符串值的函数和运算符。此处的字符串包括 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 转义的字符串常量(请参见 Section 4.1.2.3)。
|
concat
、concat_ws
和 format
函数是可变参数的,因此可以将要连接或格式化的值作为用 VARIADIC
关键字标记的数组传递(请参见 Section 36.5.6)。数组的元素将被视为函数的单独普通参数。如果可变参数数组参数为 NULL,则 concat
和 concat_ws
返回 NULL,但 format
将 NULL 视为零元素数组。
另请参见 Section 9.21 中的聚合函数 string_agg
,以及 Table 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
将参数值格式化为简单字符串。空值被视为空字符串。
I
将参数值视为 SQL 标识符,如果需要,则将其用双引号括起来。该值为空将导致错误(等效于 quote_ident
)。
L
将参数值作为 SQL 字面量引用。空值显示为字符串 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 语句特别有用。参见 Example 41.1.
如果您在文档中发现任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用 此表格 报告文档问题。