在本节中,无涯教程将了解 PostgreSQL Interval数据类型的工作原理,并且还将看到 Interval数据类型的示例。最常用的间隔函数,例如 NOW(),TO_CHAR(),EXTRACT(),justify_days(),justify_hours(),justify_interval()。
Interval 是另一种数据类型,用于存储和部署年,月,日,小时,分钟,秒,等中的时间。 月和日值是整数值,而秒的字段可以是分数值。
PostgreSQL间隔数据类型值涉及 16字节存储大小,这有助于存储可接受范围为- 178000000年至178000000 年的时间段。
@ interval [ fields ] [ (p) ]
让无涯教程看一个示例示例,以便无涯教程更好地理解如何在带 @参数和不带@参数的情况下编写间隔值:
@interval '6 months before'; @interval '2 hours 30 minutes';
或
interval '6 months before'; interval '2 hours 30 minutes';
让无涯教程看一个示例示例,以了解 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中,无涯教程具有以下详细语法,可帮助无涯教程编写时间间隔值:
quantity unit [quantity unit...] [direction]
在下面的示例中,无涯教程将显示一些使用 verbose语法的时间间隔值:
INTERVAL '1 year 5 months 5 days'; INTERVAL '1 weeks ago';
ISO 8601的指示符格式如下:
P quantity unit [ quantity unit ...] [ T [ quantity unit ...]]
在上述格式中,间隔值必填以字母P 开头,并且字母T 用于定义时间单位。
下表显示了 ISO 8601间隔单位缩写:
缩写 | 说明 |
---|---|
Y | 年 |
M | 月(日期部分) |
W | 周 |
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
可以使用 SET intervalstyle 命令设置间隔值的PostgreSQL间隔输出格式,如下例所示:
SET intervalstyle = 'iso_8601';
PostgreSQL包含四种不同的输出格式,例如:
让无涯教程看一个更好理解的例子:
以下命令用于以四种不同的输出格式显示 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 间隔输出格式:
对于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 间隔输出格式:
对于Postgres输出格式 - 在以下命令中,无涯教程将上述间隔值 SET intervalstyle 设置为 Postgres :
SET intervalstyle = 'postgres'; SELECT INTERVAL '5 years 4 months 3 days 2 hours 1 minutes 1 second';
成功执行上述命令后,无涯教程将获得以下结果,该命令显示了 Postgres 间隔输出格式:
对于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 间隔输出格式:
无涯教程可以使用 TO_CHAR()函数将间隔值修改为字符串。
用于将PostgreSQL间隔修改为字符串的语法
TO_CHAR(interval,format)
在下面的示例中,无涯教程将使用TO_CHAR()函数,该函数将PostgreSQL间隔转换为字符串值:
SELECT TO_CHAR( INTERVAL '15h 15m 15s','HH24:MI:SS' );
成功执行以上命令后,无涯教程将得到以下结果:
无涯教程可以使用以下 +,-,*等算术运算符来获取间隔值。
让无涯教程看一下下面的示例,以便无涯教程更好地理解:
在以下命令中,无涯教程将在PostgreSQL间隔数据类型的帮助下使用算术运算符(+)
SELECT INTERVAL '1h 50m' + INTERVAL '5m';
在执行上述命令时,无涯教程将获得以下结果,如下所示:
在以下命令中,无涯教程将在PostgreSQL interval数据类型的帮助下使用算术运算符(-):
SELECT INTERVAL '3h 50m' - INTERVAL '30m';
在执行上述命令后,无涯教程将得到以下结果:
在以下命令中,无涯教程将在PostgreSQL interval数据类型的帮助下使用算术运算符(*):
SELECT 400 * INTERVAL '5 minute';
在执行上述命令后,无涯教程将得到以下结果:
无涯教程可以使用 EXTRACT()函数从间隔值中提取字段,例如年,月,日等。
The Syntax for 从PostgreSQL间隔中提取数据
EXTRACT(field FROM interval)
在以上语法中,无涯教程可以在字段参数中使用年,月,日,时,分等。
在下面的示例中,无涯教程将使用 EXTRACT()函数检索双精度值。
SELECT EXTRACT (MINUTE FROM INTERVAL '2 hours 30 minutes' );
成功执行上述命令后,无涯教程将获得以下输出,该输出显示双精度值的 date部分,如下所示:
无涯教程在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小时为一天:
除此之外, justify_interval 函数借助 justify_days和justify_hours 并添加了符号修改来调节间隔值:
在以下示例中,无涯教程将使用select命令的justifiy_interval函数:
SELECT justify_interval(interval '6 months -1 hour');
执行上述命令后,无涯教程将获得以下输出:
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)