日期/时间函数 & 运算符

收藏504

阅读10263

更新时间2025-08-21

我们在数据类型一章中讨论了日期/时间数据类型。 现在,让我们看看日期/时间运算符和函数。

下表列出了基本算术运算符的行为 −

运算符 示例 结果
+ date '2001-09-28' + integer '7' date '2001-10-05'
+ date '2001-09-28' + interval '1 hour' timestamp '2001-09-28 01:00:00'
+ date '2001-09-28' + time '03:00' timestamp '2001-09-28 03:00:00'
+ interval '1 day' + interval '1 hour' interval '1 day 01:00:00'
+ timestamp '2001-09-28 01:00' + interval '23 hours' timestamp '2001-09-29 00:00:00'
+ time '01:00' + interval '3 hours' time '04:00:00'
- - interval '23 hours' interval '-23:00:00'
- date '2001-10-01' - date '2001-09-28' integer '3' (days)
- date '2001-10-01' - integer '7' date '2001-09-24'
- date '2001-09-28' - interval '1 hour' timestamp '2001-09-27 23:00:00'
- time '05:00' - time '03:00' interval '02:00:00'
- time '05:00' - interval '2 hours' time '03:00:00'
- timestamp '2001-09-28 23:00' - interval '23 hours' timestamp '2001-09-28 00:00:00'
- interval '1 day' - interval '1 hour' interval '1 day -01:00:00'
- timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' interval '1 day 15:00:00'
* 900 * interval '1 second' interval '00:15:00'
* 21 * interval '1 day' interval '21 days'
* double precision '3.5' * interval '1 hour' interval '03:30:00'
/ interval '1 hour' / double precision '1.5' interval '00:40:00'

以下是可用的所有重要日期和时间相关功能的列表。

S. No. Function & Description
1 AGE()

Subtract arguments

2 CURRENT DATE/TIME()

当前日期和时间

3 DATE_PART()

获取子字段(相当于提取)

4 EXTRACT()

获取子字段

5 ISFINITE()

测试有限的日期、时间和间隔(不是 +/-infinity)

6 JUSTIFY

调整间隔


AGE(timestamp, timestamp), AGE(timestamp)

S. No. Function & Description
1

AGE(timestamp, timestamp)

当使用第二个参数的 TIMESTAMP 形式调用时,AGE() 减去参数,产生使用年份和月份且类型为 INTERVAL 的“符号”结果。

2

AGE(timestamp)

当仅使用 TIMESTAMP 作为参数调用时,AGE() 从 current_date 中减去(在午夜)。

AGE(timestamp, timestamp) 函数的例子是 −

testdb=# SELECT AGE(timestamp '2001-04-10', timestamp '1957-06-13');

上面给出的 PostgreSQL 语句将产生以下结果 −

           age
-------------------------
 43 years 9 mons 27 days

AGE(timestamp) 函数的示例是 −

testdb=# select age(timestamp '1957-06-13');

上面给出的 PostgreSQL 语句将产生以下结果 −

           age
--------------------------
 55 years 10 mons 22 days

当前日期/时间()

PostgreSQL 提供了许多返回与当前日期和时间相关的值的函数。 下面是一些函数 −

S. No. Function & Description
1

CURRENT_DATE

提供当前日期。

2

CURRENT_TIME

提供带时区的值。

3

CURRENT_TIMESTAMP

提供带时区的值。

4

CURRENT_TIME(precision)

可选地采用精度参数,这会导致结果被四舍五入到秒字段中的小数位数。

5

CURRENT_TIMESTAMP(precision)

可选地采用精度参数,这会导致结果被四舍五入到秒字段中的小数位数。

6

LOCALTIME

提供没有时区的值。

7

LOCALTIMESTAMP

提供没有时区的值。

8

LOCALTIME(precision)

可选地采用精度参数,这会导致结果被四舍五入到秒字段中的小数位数。

9

LOCALTIMESTAMP(precision)

可选地采用精度参数,这会导致结果被四舍五入到秒字段中的小数位数。

使用上表中的函数的示例 −

testdb=# SELECT CURRENT_TIME;
       timetz
--------------------
 08:01:34.656+05:30
(1 row)

testdb=# SELECT CURRENT_DATE;
    date
------------
 2013-05-05
(1 row)

testdb=# SELECT CURRENT_TIMESTAMP;
              now
-------------------------------
 2013-05-05 08:01:45.375+05:30
(1 row)

testdb=# SELECT CURRENT_TIMESTAMP(2);
         timestamptz
------------------------------
 2013-05-05 08:01:50.89+05:30
(1 row)

testdb=# SELECT LOCALTIMESTAMP;
       timestamp
------------------------
 2013-05-05 08:01:55.75
(1 row)

PostgreSQL 还提供了返回当前语句开始时间的函数,以及调用函数时的实际当前时间。 这些功能是 −

S. No. Function & Description
1

transaction_timestamp()

它等价于 CURRENT_TIMESTAMP,但被命名为清楚地反映它返回的内容。

2

statement_timestamp()

它返回当前语句的开始时间。

3

clock_timestamp()

它返回实际的当前时间,因此即使在单个 SQL 命令中,它的值也会发生变化。

4

timeofday()

它返回实际的当前时间,但作为格式化的文本字符串而不是带有时区值的时间戳。

5

now()

它是一个传统的 PostgreSQL 等价于 transaction_timestamp()。


DATE_PART(text, timestamp), DATE_PART(text, interval), DATE_TRUNC(text, timestamp)

S. No. Function & Description
1

DATE_PART('field', source)

这些函数获取子字段。 field 参数需要是字符串值,而不是名称。

有效的字段名称是: century, day, decade, dow, doy, epoch, hour, isodow, isoyear, microseconds, millennium, milliseconds, minute, month, quarter, second, timezone, timezone_hour, timezone_minute, week, year。

2

DATE_TRUNC('field', source)

此函数在概念上类似于数字的 trunc 函数。 source 是时间戳或间隔类型的值表达式。 field 选择截断输入值的精度。 返回值的类型为 timestampinterval

field 的有效值为 : microseconds, milliseconds, second, minute, hour, day, week, month, quarter, year, decade, century, millennium

以下是 DATE_PART('field', source) 函数的示例 −

testdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
 date_part
-----------
        16
(1 row)

testdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
 date_part
-----------
         4
(1 row)

以下是 DATE_TRUNC('field', source) 函数的示例 −

testdb=# SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
     date_trunc
---------------------
 2001-02-16 20:00:00
(1 row)

testdb=# SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
     date_trunc
---------------------
 2001-01-01 00:00:00
(1 row)

EXTRACT(field from timestamp), EXTRACT(field from interval)

EXTRACT(field FROM source) 函数从日期/时间值检索子字段,例如年或小时。 source 必须是 timestamp、time 或 interval 类型的值表达式。field 是一个标识符或字符串,用于选择要从源值中提取的字段。 EXTRACT 函数返回 双精度 类型的值。

以下是有效的字段名称(类似于 DATE_PART 函数字段名称): century, day, decade, dow, doy, epoch, hour, isodow, isoyear, microseconds, millennium, milliseconds, minute, month, quarter, second, timezone, timezone_hour, timezone_minute, week, year。

以下是 EXTRACT('field', source) 函数的示例 −

testdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
 date_part
-----------
        20
(1 row)

testdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
 date_part
-----------
        16
(1 row)

ISFINITE(date), ISFINITE(timestamp), ISFINITE(interval)

S. No. Function & Description
1

ISFINITE(date)

测试有限日期。

2

ISFINITE(timestamp)

测试有限的时间戳。

3

ISFINITE(interval)

测试有限区间。

以下是 ISFINITE() 函数的示例 −

testdb=# SELECT isfinite(date '2001-02-16');
 isfinite
----------
 t
(1 row)

testdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30');
 isfinite
----------
 t
(1 row)

testdb=# SELECT isfinite(interval '4 hours');
 isfinite
----------
 t
(1 row)

JUSTIFY_DAYS(interval), JUSTIFY_HOURS(interval), JUSTIFY_INTERVAL(interval)

S. No. Function & Description
1

JUSTIFY_DAYS(interval)

调整间隔,以便将 30 天的时间段表示为月。 返回interval类型

2

JUSTIFY_HOURS(interval)

调整间隔,以便将 24 小时时间段表示为天。 返回interval类型

3

JUSTIFY_INTERVAL(interval)

使用 JUSTIFY_DAYS 和 JUSTIFY_HOURS 调整间隔,并进行额外的符号调整。 返回 interval 类型

The following are the examples for the ISFINITE() functions −

testdb=# SELECT justify_days(interval '35 days');
 justify_days
--------------
 1 mon 5 days
(1 row)

testdb=# SELECT justify_hours(interval '27 hours');
 justify_hours
----------------
 1 day 03:00:00
(1 row)

testdb=# SELECT justify_interval(interval '1 mon -1 hour');
 justify_interval
------------------
 29 days 23:00:00
(1 row)

相关

视频

RELATED VIDEOS

更多

免费

phpStudy极速入门视频教程

免费

Midjourney基础课程
初级 Midjourney基础课程

11149次学习

收藏

免费

极客学院Git使用视频教程

免费

尚观shell视频教程
高级 尚观shell视频教程

15709次学习

收藏

免费

尚观Linux入门视频教程
初级 尚观Linux入门视频教程

42887次学习

收藏

免费

尚观Linux初级视频教程
初级 尚观Linux初级视频教程

40264次学习

收藏

免费

尚观Linux中级视频教程
中级 尚观Linux中级视频教程

48298次学习

收藏

免费

尚观Linux高级视频教程
高级 尚观Linux高级视频教程

41982次学习

收藏

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

70.9万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号