📜  PostgreSQL间隔

📅  最后修改于: 2020-11-30 07:42:54             🧑  作者: Mango

PostgreSQL间隔

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

什么是PostgreSQL间隔数据类型?

在PostgreSQL中,“间隔”是另一种数据类型,用于存储和部署“年”,“月”,“天”,“小时”,“分钟”,“秒”等。“月”和“天”值是整数值,而“秒”字段可以是小数部分价值观。

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

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

PostgreSQL Interval数据类型的语法

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

@ interval [ fields ] [ (p) ]   

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

Parameter Description
fields The field parameter is used to show the Time.
p P is used to display precision value.
@ We can ignore the @ parameter as it is an optional parameter.

让我们看一个示例示例,以更好地理解如何使用@参数和不使用@参数来编写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间隔值

PostgreSQL间隔输入格式

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

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

我们有以下参数,在以上语法中使用:

Parameter Description
quantity A quantity is a number, which also accepts signs like + or
unit The unit can be any millennium, century, decade, year, month, week, day, hour, minute, second, millisecond, microsecond, or abbreviation can be the following y, m, d, etc. and the plural forms can be the months, days, etc.
direction The direction parameter can be ago or the empty string.

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

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

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

ISO 8601间隔格式

除了上面的详细语法之外,PostgreSQL还提供了两种方式来编写间隔值并借助ISO 8601时间间隔:

  • 指示符格式
  • 替代格式

ISO 8601的指示符格式如下:

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

在上述格式中,必要的间隔值以字母P开头,字母T用于定义时间单位

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

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

注意:根据它在字母T之前还是之后,M可以是几个月或几分钟。

让我们看一下ISO 8601标识符格式的示例,以便我们更好地理解:

ISO 8601指示符格式的书写间隔为5年4个月3天2小时1分1秒

P5Y4M3DT2H1M1S

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

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

它也以字母P和字母T开头,它们将间隔值的时间和日期部分分开。

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

P0005-04-03T02:01:01

PostgreSQL间隔输出格式

可以使用SET intervalstyle命令设置间隔值的PostgreSQL间隔输出格式,如下面的示例所示:

SET intervalstyle = 'iso_8601';

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

  • iso_8601
  • postgres_verbose
  • Postgres
  • sql标准

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

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

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

对于ISO_8601输出格式

在以下命令中,我们将上述间隔值的间隔样式设置为iso_8601:

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

输出量

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

对于postgres_verbose输出格式

在下面的命令中,我们将上述间隔值的间隔样式设置为postgres_verbose:

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

输出量

执行上述命令后,我们将获得以下结果,该命令显示postgres_verbose interval输出格式:

对于Postgres输出格式

在以下命令中,我们将上述间隔值的intervalstyle设置Postgres:

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

输出量

成功执行上述命令后,我们将获得以下结果,该命令显示了Postgres interval输出格式:

对于Sql_standard输出格式

在以下命令中,我们将上述间隔值的intervalstyle设置sql_standard:

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

输出量

成功执行以上命令后,我们将获得以下结果,该命令代表sql_standard interval输出格式:

将PostgreSQL间隔修改为字符串

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

将PostgreSQL间隔修改为字符串的语法

TO_CHAR(interval,format)

TO_CHAR()函数将第一个语句作为间隔值,将另一个语句作为格式,并检索一个字符串,以特定格式显示间隔。

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

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

输出量

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

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

间隔运算符

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

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

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

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

输出量

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

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

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

输出量

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

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

SELECT
400 * INTERVAL '5 minute';

输出量

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

从PostgreSQL间隔中提取数据

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

从PostgreSQL间隔提取数据的语法

EXTRACT(field FROM interval)

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

如果我们要从间隔中提取,则提取函数将返回双精度类型的值。

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

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

输出量

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

调整PostgreSQL间隔值

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

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

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

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

输出量

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

除此之外, justify_interval函数借助justify_days和justify_hours并添加了符号修改来调节间隔值:

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

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

输出量

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

总览

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

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