PostgreSQL - Interval类型

PostgreSQL - Interval类型 首页 / PostgreSQL入门教程 / PostgreSQL - Interval类型

在本节中,无涯教程将了解 PostgreSQL Interval数据类型的工作原理,并且还将看到 Interval数据类型的示例最常用的间隔函数,例如 NOW(),TO_CHAR(),EXTRACT(),justify_days(),justify_hours(),justify_interval()。

Interval数据类型

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

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

Interval类型语法

@ interval [ fields ] [ (p) ]   

让无涯教程看一个示例示例,以便无涯教程更好地理解如何在 @参数和不带@参数的情况下编写间隔值:

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

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

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

无涯教程已经看到了间隔数据类型的主要示例并理解它的工作。现在,无涯教程将看到间隔值的输入和输出格式。

Interval输入格式

在PostgreSQL中,无涯教程具有以下详细语法,可帮助无涯教程编写时间间隔值:

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

在下面的示例中,无涯教程将显示一些使用 verbose语法的时间间隔值:

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

ISO 8601间隔格式

ISO 8601的指示符格式如下:

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

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

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

缩写说明
Y
M月(日期部分)
D
H小时
M分钟(时间部分)
S

让无涯教程看到 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

Interval输出格式

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

SET intervalstyle = 'iso_8601';

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

  • iso_8601
  • postgres_verbose
  • postgres
  • sql标准

让无涯教程看一个更好理解的例子:

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

对于ISO_8601输出格式  -   在以下命令中,无涯教程将上述间隔值 SET intervalstyle 设置为 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输出格式  -  在以下命令中,无涯教程将上述间隔值 SET intervalstyle 设置为 postgres_verbose :

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

执行上述命令后,无涯教程将获得以下结果,该命令显示了 postgres_verbose 间隔输出格式:

PostgreSQL Interval

对于Postgres输出格式  -   在以下命令中,无涯教程将上述间隔值 SET intervalstyle 设置为 Postgres :

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

成功执行上述命令后,无涯教程将获得以下结果,该命令显示了 Postgres 间隔输出格式:

PostgreSQL Interval

对于Sql_standard输出格式  -  在以下命令中,无涯教程将上述间隔值 SET intervalstyle 设置为 sql_standard :

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

成功执行上述命令后,无涯教程将得到以下结果,该命令表示 sql_standard 间隔输出格式:

PostgreSQL Interval

Interval修改为字符串

无涯教程可以使用 TO_CHAR()函数将间隔值修改为字符串。

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

TO_CHAR(interval,format)

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

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

成功执行以上命令后,无涯教程将得到以下结果:

PostgreSQL Interval

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

Interval提取数据

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

The Syntax for 从PostgreSQL间隔中提取数据

EXTRACT(field FROM interval)

在以上语法中,无涯教程可以在字段参数中使用年,月,日,时,分等。

在下面的示例中,无涯教程将使用 EXTRACT()函数检索双精度值。

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

成功执行上述命令后,无涯教程将获得以下输出,该输出显示双精度值的 date部分,如下所示:

PostgreSQL Interval

调整Interval间隔值

无涯教程在PostgreSQL中有两个函数, justify_days和justify_hours ,这使无涯教程可以将 24小时间隔修改为一天和间隔 30天中的一个,则认为是一个月

让无涯教程看一个示例,以了解无涯教程如何调整PostgreSQL间隔值:

链接:https://www.learnfk.comhttps://www.learnfk.com/postgresql/postgresql-interval.html

来源:LearnFk无涯教程网

在以下命令中,无涯教程将使用 justify_days和justify_hours函数:

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

执行上述命令后,无涯教程将得到以下结果,该结果显示间隔为 30天为一个月间隔为24小时为一天:

PostgreSQL Interval

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

在以下示例中,无涯教程将使用select命令的justifiy_interval函数:

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

执行上述命令后,无涯教程将获得以下输出:

PostgreSQL Interval

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

软件测试52讲 -〔茹炳晟〕

持续交付36讲 -〔王潇俊〕

从0开始做增长 -〔刘津〕

玩转webpack -〔程柳锋〕

分布式协议与算法实战 -〔韩健〕

Kafka核心源码解读 -〔胡夕〕

爆款文案修炼手册 -〔乐剑峰〕

React Hooks 核心原理与实战 -〔王沛〕

说透区块链 -〔自游〕

好记忆不如烂笔头。留下您的足迹吧 :)