PostgreSQL 间隔

2025年3月17日 | 阅读 8 分钟

在本节中,我们将了解 PostgreSQL 时间间隔 (Interval) 数据类型 的工作原理,还将看到 时间间隔数据类型示例。以及最常用的时间间隔 函数,例如 NOW()、TO_CHAR()、EXTRACT()、justify_days()、justify_hours()、justify_interval()。PostgreSQL 时间间隔值的 输入和输出 格式。

什么是 PostgreSQL 时间间隔数据类型?

在 PostgreSQL 中,Interval 是另一种用于存储和表示 年、月、日、时、分、秒 等时间的数据类型。月和日 的值是 整数值,而 秒字段 可以是 小数

PostgreSQL 时间间隔数据类型值占用 16 字节存储 空间,可以存储的时间段范围是 -178000000 年到 178000000 年

注意:秒字段中小数位数的数量称为精度 p。

PostgreSQL 时间间隔数据类型语法

PostgreSQL 时间间隔数据类型的语法如下:

在上面的语法中,我们有以下参数

参数描述
field 参数用于显示时间。
pP 用于显示精度值。
@我们可以忽略 @ 参数,因为它是一个可选参数。

让我们看一个示例,以便我们更好地理解如何 @ 参数和不带 @ 参数 编写时间间隔值。

注意:上面两条语句都可以使用,它们是相互对应的。此外,时间间隔值可以有一个可选的精度值 p,其允许范围从 0 到 6。

PostgreSQL 时间间隔数据类型示例

让我们看一个示例,以了解 PostgreSQL 时间间隔数据类型 如何工作。

在下面的示例中,我们将尝试找出过去 2 小时 30 分钟,在去年的当前时间;我们将使用以下命令:

输出

执行上述命令后,我们将得到以下输出,显示距离去年 2 小时 30 分钟

PostgreSQL Interval

我们已经看到了时间间隔数据类型的主要示例并了解了其工作原理。现在,我们将查看 时间间隔值 的输入和输出格式。

首先,我们将理解 PostgreSQL 时间间隔值的输入格式

PostgreSQL 时间间隔输入格式

在 PostgreSQL 中,我们有以下 详细语法,它可以帮助我们编写时间间隔值:

我们有以下参数,用于上述语法:

参数描述
quantityquantity 是一个数字,也可以接受 +- 符号。
unitunit 可以是 千禧年、世纪、十年、年、月、周、日、时、分、秒、毫秒、微秒,或者缩写可以是 y、m、d 等,复数形式可以是 months、days 等。
directiondirection 参数可以是 ago 或空字符串

注意:上述语法也用于时间间隔输出格式,称为 postgres_verbose。

在下面的示例中,我们将显示一些使用 详细语法 的时间间隔值。

ISO 8601 时间间隔格式

除了上述详细语法之外,为了使用 ISO 8601 时间间隔 编写时间间隔值,PostgreSQL 提供了两种方式,如下所示:

  • 设计符格式
  • 替代格式

ISO 8601 的设计符格式如下:

在上述格式中,时间间隔值必须以 P 开头,而 T 用于定义时间单位

下表显示了 ISO 8601 时间间隔 单位缩写:

缩写描述
Y年份
M月(用于日期部分)
W
D
H小时
M分钟(用于时间部分)
S

注意:M 可以是月或分钟,取决于它出现在 T 字母的前面还是后面。

为了我们更好地理解,让我们看一个 ISO 8601 设计符 格式的示例。

5 年 4 个月 3 天 2 小时 1 分钟 1 秒 的时间间隔可以写成 ISO 8601 设计符格式

并且 ISO 8601 的替代形式如下所示:

它也以 P 开头,T 分隔 了时间间隔值的 日期和时间 部分。

例如,5 年 4 个月 3 天 2 小时 1 分钟 1 秒ISO 8601 替代形式 可以写成如下:

PostgreSQL 时间间隔输出格式

PostgreSQL 时间间隔值的输出格式可以通过 SET intervalstyle 命令设置,正如我们在下面的示例中看到的:

PostgreSQL 有四种不同的输出格式,如下:

  • iso_8601
  • postgres_verbose
  • Postgres
  • sql standard

注意:PostgreSQL 默认使用 Postgres 样式来格式化时间间隔值。

为了我们更好地理解,让我们看一个示例。

下面的命令用于以四种不同的输出格式显示 5 年 4 个月 3 天 2 小时 1 分钟 1 秒

ISO_8601 输出格式

在下面的命令中,我们将为上述时间间隔值 设置 intervalstyleiso_8601

输出

执行上述命令后,我们将得到以下结果,它表示 iso_8601 时间间隔输出格式。

PostgreSQL Interval

postgres_verbose 输出格式

在下面的命令中,我们将为上述时间间隔值 设置 intervalstylepostgres_verbose

输出

执行上述命令后,我们将得到以下结果,它显示 postgres_verbose 时间间隔输出格式。

PostgreSQL Interval

Postgres 输出格式

在下面的命令中,我们将为上述时间间隔值 设置 intervalstylePostgres

输出

成功执行上述命令后,我们将得到以下结果,它显示 Postgres 时间间隔输出格式。

PostgreSQL Interval

Sql_standard 输出格式

在下面的命令中,我们将为上述时间间隔值 设置 intervalstylesql_standard

输出

成功执行上述命令后,我们将得到以下结果,它表示 sql_standard 时间间隔输出格式。

PostgreSQL Interval

将 PostgreSQL 时间间隔转换为字符串

我们可以使用 TO_CHAR() 函数将时间间隔值转换为字符串。

将 PostgreSQL 时间间隔转换为字符串的语法:

TO_CHAR() 函数时间间隔值 作为第一个参数,以 格式 作为第二个参数,并返回一个字符串,显示特定格式的时间间隔。

在下面的示例中,我们将使用 TO_CHAR() 函数,它将 PostgreSQL 时间间隔转换为字符串值。

输出

成功执行上述命令后,我们将得到以下结果:

PostgreSQL Interval

PostgreSQL 时间间隔相关运算符和函数

时间间隔运算符

我们可以使用以下 +、-、* 等算术运算符 来获取时间间隔值。

为了我们更好地理解,让我们看下面的示例。

在下面的命令中,我们将使用 PostgreSQL 时间间隔数据类型 算术运算符 (+)

输出

执行上述命令后,我们将得到如下结果:

PostgreSQL Interval

在下面的命令中,我们将使用 PostgreSQL 时间间隔数据类型 算术运算符 (-)

输出

执行上述命令后,我们将得到以下结果:

PostgreSQL Interval

在下面的命令中,我们将使用 PostgreSQL 时间间隔数据类型 算术运算符 (*)

输出

执行上述命令后,我们将得到以下结果:

PostgreSQL Interval

从 PostgreSQL 时间间隔中提取数据

我们可以使用 EXTRACT() 函数从时间间隔值中提取字段,例如 年、月、日等

从 PostgreSQL 时间间隔中提取数据的语法:

在上述语法中,我们可以在 field 参数中使用 year、month、date、hour、minutes 等。

如果我们想从时间间隔中提取数据,extract 函数将返回一个双精度类型的值。

在下面的示例中,我们将使用 EXTRACT() 函数检索双精度值。

输出

成功执行上述命令后,我们将得到如下输出,显示 双精度值 的日期部分,如下所示:

PostgreSQL Interval

调整 PostgreSQL 时间间隔值

PostgreSQL 中有两个函数,justify_days 和 justify_hours,它们允许我们将 24 小时的时间间隔 视为 一天,并将 30 天的时间间隔 视为 一个月

让我们看一个示例,以了解我们如何调整 PostgreSQL 时间间隔值。

在下面的命令中,我们将使用 justify_days 和 justify_hours 函数:

输出

执行上述命令后,我们将得到以下结果,它显示 30 天的时间间隔视为一个月24 小时的时间间隔视为一天

PostgreSQL Interval

此外,justify_interval 函数通过 justify_days 和 justify_hours 以及附加的符号修改来调整时间间隔值。

在下面的示例中,我们将使用 justifiy_interval 函数和 SELECT 命令。

输出

执行上述命令后,我们将得到以下输出:

PostgreSQL Interval

概述

PostgreSQL 时间间隔数据类型 部分,我们学习了以下主题:

  • PostgreSQL 时间间隔数据 类型用于存储和表示 年、月、日、时、分、秒 的时间段。
  • 我们使用了不同的 时间间隔函数,例如 NOW()、TO_CHAR(),以增强特定表中的时间间隔值。
  • PostgreSQL 时间间隔值同时具有 输入和输出 时间间隔格式。
  • 我们可以使用 justify_days()、justify_hours、justify_interval() 函数 来调整 PostgreSQL 时间间隔值。
  • 我们可以使用 EXTRACT() 函数提取时间间隔字段值。

下一主题PostgreSQL UUID