本节描述了用于检查和操作字符串值的函数和操作符。此上下文中的字符串包括 character
、character varying
和 text
类型的值。除非另有说明,这些函数和操作符被声明为接受并返回 text
类型。它们可以互换地接受 character varying
参数。character
类型的值在应用函数或操作符之前会转换为 text
,从而去除 character
值中的任何尾随空格。
SQL定义了一些使用关键字(而不是逗号)分隔参数的字符串函数。详细信息请参阅表 9.9。PostgreSQL 还提供了使用常规函数调用语法的这些函数的版本(请参阅表 9.10)。
字符串连接运算符 (||
) 将接受非字符串输入,只要至少一个输入是字符串类型即可,如表 9.9所示。对于其他情况,可以使用显式强制转换为 text
来接受非字符串输入。
表 9.9. SQL字符串函数和操作符
函数/操作符 描述 示例 |
---|
连接两个字符串。
|
将非字符串输入转换为文本,然后连接两个字符串。(非字符串输入不能是数组类型,因为这将导致与数组
|
从
|
检查字符串是否为指定的 Unicode 规范化形式。可选的
|
返回字符串中的位数(8 乘以
|
返回字符串中的字符数。
|
根据数据库的语言环境规则,将字符串转换为全小写。
|
通过在
|
从
|
将字符串转换为指定的 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字符。
|
返回具有给定代码的字符。在UTF8UTF8ASCII编码中,该参数被视为 Unicode 代码点。在其他多字节编码中,该参数必须指定一个 ASCII 字符。
|
连接所有参数的文本表示形式。NULL 参数将被忽略。
|
连接除第一个参数之外的所有参数,并带有分隔符。第一个参数用作分隔符字符串,并且不应为 NULL。其他 NULL 参数将被忽略。
|
根据格式字符串格式化参数;请参阅第 9.4.1 节。此函数类似于 C 函数
|
将每个单词的第一个字母转换为大写,其余字母转换为小写。单词是由非字母数字字符分隔的字母数字字符序列。
|
返回字符串中最前面的
|
返回字符串中的字符数。
|
计算参数的 MD5 哈希值,结果以十六进制形式写入。
|
将
|
返回当前的客户端编码名称。
|
返回适合在SQL语句字符串中用作标识符的适当引用的给定字符串。只有在必要时(即,如果字符串包含非标识符字符或会被折叠大小写)才会添加引号。嵌入的引号会正确加倍。另请参阅 示例 41.1。
|
返回适合在SQL语句字符串中用作字符串文字的适当引用的给定字符串。嵌入的单引号和反斜杠会被正确加倍。请注意,
|
将给定的值转换为文本,然后将其引用为文字。嵌入的单引号和反斜杠会被正确加倍。
|
返回适合在SQL语句字符串中;或者,如果参数为 null,则返回
|
将给定的值转换为文本,然后将其引用为文字;或者,如果参数为 null,则返回
|
返回 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
,以及用于在字符串和 bytea
类型之间转换的函数,请参见表 9.13。
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 标识符,并在必要时使用双引号将其引起来。如果该值为 null,则会出错(等效于 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 语句特别有用。请参阅示例 41.1。
如果您发现文档中存在任何不正确、与您使用特定功能的体验不符或需要进一步澄清的地方,请使用此表单来报告文档问题。