PostgreSQL 教程: format 函数

九月 18, 2023

PostgreSQL 的FORMAT()函数根据格式字符串格式化参数。

如果你使用过 C 语言编程,你会发现FORMAT()函数和sprintf()函数是相似的。

语法

PostgreSQL 的FORMAT()函数的语法如下:

FORMAT(format_string [, format_arg [, ...] ])

FORMAT()函数是可变参数的,参数列表是用VARIADIC关键字标记的,因此,您可以传递数组形式的参数进行格式化。

FORMAT()函数将数组的元素视为普通参数,并将 NULL 视为零元素的数组。

参数

1) format_string

format_string参数是一个字符串,指定结果字符串的格式。

format_string由文本和格式说明符组成。文本直接复制到结果字符串,而格式说明符是要插入到结果字符串的参数的占位符。

下面显示了格式说明符的语法:

%[position][flags][width]type

格式说明符以%字符开头。它具有三个可选部分:positionflagswidth,和一个必需部分type

position

position指定要在结果字符串中插入哪个参数。position采用n$形式,其中n是参数索引。第一个参数从 1 开始。

如果省略position部分,则默认值是列表中的下一个参数。

flags

目前,这些标志可以接受减号 (-),指示格式说明符的输出进行左对齐。

flags部分只有在指定width字段时才生效。

width

可选的width字段指定用于显示格式说明符输出的最小字符数。

结果字符串可以向左或向右填充空格,以适应width

如果width太小,输出将按原样显示,不进行任何截断。

width可以是以下值之一:

  • 正整数。
  • 星号 (*) 使用下一个函数参数作为宽度。
  • *n$形式的字符串使用第 n 个函数参数作为宽度。

type

type是用于生成格式说明符输出的格式转换类型。

type 参数的允许值如下:

  • s将参数值格式化为字符串。NULL 被视为空字符串。
  • I将参数值视为 SQL 标识符。
  • L将参数值用引号修饰 SQL 文字。

我们经常使用IL来构造动态 SQL 语句。

如果要在结果字符串中包含%,请使用双百分号%%

2) format_arg

如前所述,您将许多格式参数传递给FORMAT()函数。

返回值

FORMAT()函数会返回一个格式化的字符串。

示例

让我们看一下使用FORMAT()函数的一些示例。

A) 简单的格式

以下语句使用FORMAT()函数来格式化字符串:

SELECT FORMAT('Hello, %s', 'PostgreSQL');

输出是:

'Hello, PostgreSQL'

在此示例中,%s被替换为字符串参数'PostgreSQL'

请查看示例数据库中的customer表,如下。

customer table

以下语句使用FORMAT()函数根据名字和姓氏构造客户的全名:

SELECT
    FORMAT('%s, %s', last_name, first_name) full_name
FROM
    customer;
ORDER BY
    full_name;

PostgreSQL FORMAT example

在此示例中,我们使用了两个格式说明符 %s %s,然后将其替换为first_namelast_name列中的值。

B) 使用flags部分的示例

以下语句显示了如何在格式说明符中使用flagswidth部分:

SELECT FORMAT('|%10s|', 'one');

输出字符串左填充空格并向右对齐。

format
--------------
 |       one|
(1 row)

要使其左对齐,请使用作为标志:

SELECT FORMAT('|%-10s|', 'one');

输出是:

    format
--------------
 |one       |
(1 row)

C) 使用position部分的示例

此示例显示如何使用格式说明符的position部分:

SELECT 
    FORMAT('%1$s apple, %2$s orange, %1$s banana', 'small', 'big');

下图说明了输出:

                format
---------------------------------------
 small apple, big orange, small banana
(1 row)

在这个例子中,我们有两个参数,分别是'small''big'字符串。

1$2$位置指示FORMAT()函数将第一个 ('small') 和第二个参数 ('big') 注入相应的占位符中。

1$位置在格式字符串中出现两次,因此第一个参数也被插入两次。

在本教程中,您学习了如何使用 PostgreSQL 的FORMAT()函数,根据格式字符串格式化参数。