PostgreSQL 间隔


PostgreSQL Interval

在本节中,我们要了解的工作PostgreSQL的时间Interval的数据类型,我们也看到实例的的区间数据类型。 并且最常用的Interval函数,例如NOW()、TO_CHAR()、EXTRACT()、justify_days()、justify_hours()、justify_interval()。PostgreSQL Interval值的输入和输出格式。

什么是 PostgreSQL Interval数据类型?

在 PostgreSQL 中,Interval是另一种数据类型,用于存储和部署 Time,以年、月、日、小时、分钟、秒等为单位月和天的值是整数值,而秒的字段可以是分数值。

PostgreSQL Interval数据类型值涉及16 个字节的存储大小,这有助于存储可接受范围从 - 178000000 年到 178000000年的时间段。

注意:第二个字段中的小数位数称为精度 p。

PostgreSQL Interval数据类型的语法

PostgreSQL Interval 数据类型的语法如下:

@ interval [ fields ] [ (p) ]

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

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

让我们看一个示例示例,以便我们更好地理解如何使用 @ 参数和不**使用*@ 参数编写 Interval 值:

@interval '6 months before';  
@interval '2 hours 30 minutes';

或者

interval '6 months before';  
interval '2 hours 30 minutes';

注意:我们可以使用上述两个语句,因为它们彼此对应。此外,一个区间值可以有一个可选的精度值 p,允许的范围从 0 到 6。

PostgreSQL Interval数据类型示例

让我们看一个示例来了解PostgreSQL Interval 数据类型是如何工作的。

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

SELECT  
    now(),  
    now() - INTERVAL '6 months 2 hours 30 minutes'   
             AS "2 hours 30 minutes before last year";

输出

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

PostgreSQL Interval

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

首先,我们将了解输入格式PostgreSQL Interval值

PostgreSQL Interval输入格式

在 PostgreSQL 中,我们有以下冗长的语法,这有助于我们编写Interval值:

quantity unit [quantity unit...] [direction]

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

Parameter Description
quantity quantity是一个数字,它也接受像迹象+-
unit 单元可以是任何千年,百年,十年,年,月,周,日,小时,分钟,秒,毫秒,微秒,或缩写可以是以下Y,M,d等和复数形式可以是月、日
direction 方向参数可以是前或空字符串。

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

在下面的示例中,我们将显示一些使用详细语法的Interval值:

INTERVAL '1 year 5 months 5 days';  
INTERVAL '1 weeks ago';

ISO 8601 Interval格式

除了上面冗长的语法之外,为了借助ISO 8601 时间Interval来编写Interval值,PostgreSQL 为我们提供了两种方式,如下所示:

  • Designators format
  • Alternative format

ISO 8601 的指示符格式如下:

P quantity unit [ quantity unit ...] [ T [ quantity unit ...]]

在上述格式中,Interval值必需开始于字母P,并且字母T被用于定义时间的日单位

下表显示了ISO 8601 Interval单位缩写:

Abbreviation Description
Y Years
M Months (for the date part)
W Weeks
D Days
H Hours
M Minutes (for the time part)
S Seconds

注意:M 可以是月或分钟,具体取决于它是在字母 T 之前还是之后。

让我们看一个ISO 8601 指示符格式的例子,以便我们更好地理解:

ISO 8601格式指示符可以针对的Interval被写入5年4个月3天2小时1次分1秒

P5Y4M3DT2H1M1S

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

P [ years-months-days ] [ T hours:minutes:seconds ]

并且它还以字母 P 和字母 T 开头,将Interval值的时间和日期部分分开。

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

P0005-04-03T02:01:01

PostgreSQL Interval输出格式

可以在SET intervalstyle命令的帮助下设置 PostgreSQL Interval值的Interval输出格式,如下面的示例所示:

SET intervalstyle = 'iso_8601';

PostgreSQL 包含四种不同的输出格式,例如:

  • iso_8601
  • postgres_verbose
  • Postgres
  • sql standard

注意:为了格式化Interval值,PostgreSQL 默认使用 Postgres 样式。

让我们看一个更好理解的例子:

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

对于 ISO_8601 输出格式

在下面的命令中,我们将上述Interval值的Interval**样式**设置iso_8601

SET intervalstyle = 'iso_8601';  
SELECT  
INTERVAL '5 years 4 months 3 days 2 hours 1 minute 1 second';

输出

执行上述命令后,我们会得到如下结果,它代表的是iso_8601区间输出格式:

PostgreSQL Interval

对于 postgres_verbose 输出格式

在下面的命令中,我们将上述Interval值的Interval**样式**设置postgres_verbose

SET intervalstyle = 'postgres_verbose';  
SELECT  
INTERVAL '5 years 4 months 3 days 2 hours 1 minutes 1 second';

输出

执行上述命令后,我们将得到以下结果,其中显示了postgres_verboseInterval输出格式:

PostgreSQL Interval

对于 Postgres 输出格式

在下面的命令中,我们将上述Interval值的Interval样式设置Postgres

SET intervalstyle = 'postgres';  
SELECT  
INTERVAL '5 years 4 months 3 days 2 hours 1 minutes 1 second';

输出

成功执行上述命令后,我们将得到以下结果,其中显示了PostgresInterval输出格式:

PostgreSQL Interval

对于 Sql_standard 输出格式

在下面的命令中,我们将上述Interval值的Interval**样式**设置sql_standard

SET intervalstyle = 'sql_standard';  
SELECT  
INTERVAL '5 years 4 months 3 days 2 hours 1 minutes 1 second';

输出

成功执行上面的命令后我们会得到下面的结果,它代表了sql_standardInterval输出格式:

PostgreSQL Interval

将 PostgreSQL Interval修改为字符串

我们可以使用TO_CHAR()函数将区间值修改为字符串。

将 PostgreSQL Interval修改为字符串的语法

TO_CHAR(interval,format)

TO_CHAR()函数第一个语句作为一个Interval值而另一个作为格式,并检索一个字符串,显示在所述特定格式的时间Interval。

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

SELECT  
TO_CHAR(   
INTERVAL '15h 15m 15s','HH24:MI:SS'  
    );

输出

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

PostgreSQL Interval

PostgreSQL Interval相关的运算符和函数

区间运算符

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

让我们看下面的例子,以便我们更好地理解:

在以下命令中,我们将在PostgreSQL 区间数据类型的帮助下使用算术运算符 (+)

SELECT   
INTERVAL '1h 50m' + INTERVAL '5m';

输出

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

PostgreSQL Interval

在以下命令中,我们将在PostgreSQL Interval数据类型的帮助下使用算术运算符 (-)

SELECT  
INTERVAL '3h 50m' - INTERVAL '30m';

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

PostgreSQL Interval

在以下命令中,我们将在PostgreSQL Interval数据类型的帮助下使用算术运算符 (*)

SELECT  
400 * INTERVAL '5 minute';

输出

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

PostgreSQL Interval

从 PostgreSQL Interval中提取数据

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

从 PostgreSQL Interval中提取数据的语法

EXTRACT(field FROM interval)

在上面的语法中,我们可以在 field 参数中使用年、月、日、小时、分钟等。

提取物,如果我们想从时间Interval中提取函数返回类型为双精度值。

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

SELECT  
EXTRACT (MINUTE  
FROM  
INTERVAL '2 hours 30 minutes'  
    );

输出

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

PostgreSQL Interval

调整 PostgreSQL Interval值

我们在PostgreSQL中有两个函数,justify_days 和 justify_hours,它允许我们修改24 小时视为一天的Interval和30 天视为一个月的Interval。

让我们看一个例子来了解我们如何调整 PostgreSQL Interval值:

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

SELECT  
    justify_days(INTERVAL '30 days'),  
    justify_hours(INTERVAL '24 hours');

输出

执行上面的命令后,我们会得到如下结果,将30 天的Interval显示为一个月,将24 小时Interval显示为一天

PostgreSQL Interval

除此之外,justify_interval函数在justify_days 和 justify_hours的帮助下调节Interval值,添加符号修改:

在以下示例中,我们将使用 justify_interval 函数和 SELECT 命令:

SELECT  
justify_interval(interval '6 months  -1 hour');

输出

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

PostgreSQL Interval

概述

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

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