PostgreSQL 日期/时间函数和操作符

PostgreSQL 日期/时间函数和操作符

我们在数据类型章节中讨论了日期/时间数据类型。现在,让我们来看一下日期/时间操作符和函数。

以下表格列出了基本算术操作符的行为:

操作符 示例 结果
+ 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′

以下是所有与日期和时间相关的重要函数的列表。

序号 功能与描述
1 AGE() 减去参数
2 CURRENT DATE/TIME() 当前日期和时间
3 DATE_PART() 获取子字段(相当于extract函数)
4 EXTRACT() 获取子字段
5 ISFINITE() 测试有限的日期、时间和间隔(不是+/-无穷大)
6 JUSTIFY 调整间隔

AGE(timestamp, timestamp), AGE(timestamp)

序号 功能和描述
1 AGE(timestamp, timestamp) 当第二个参数以TIMESTAMP形式传入时,AGE()函数将两个参数相减,产生一个使用年份和月份的“符号”结果,结果的类型为INTERVAL。
2 AGE(timestamp) 当只有TIMESTAMP作为参数传入时,AGE()函数从当前日期(午夜时刻)开始减去该参数。

函数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

CURRENT DATE/TIME()

PostgreSQL提供了一些与当前日期和时间相关的函数,以下是其中一些函数:

序号 功能与描述
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还提供了一些函数,返回当前语句的开始时间,以及在调用函数时的实际当前时间。 这些函数包括:

序号 功能和描述
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)

序号 功能与描述
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 是类型为timestamp或interval的值表达式。 field 选择要截断输入值的精度。返回值是 timestamp 或 interval 类型的结果。 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 函数返回 double precision 类型的值。

以下是有效的字段名称(类似于 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)

编号 功能与描述
1 ISFINITE(date) 测试日期是否有限。
2 ISFINITE(timestamp) 测试时间戳是否有限。
3 ISFINITE(interval) 测试时间间隔是否有限。
以下是ISFINITE()函数的示例:

以下是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)

序号 功能和描述
1 JUSTIFY_DAYS(interval) 调整间隔,使30天的时间段表示为月份。返回 interval 类型
2 JUSTIFY_HOURS(interval) 调整间隔,使24小时的时间段表示为天数。返回 interval 类型
3 JUSTIFY_INTERVAL(interval) 使用JUSTIFY_DAYS和JUSTIFY_HOURS调整间隔,并进行附加的符号调整。返回 interval 类型

下面是ISFINITE()函数的示例:

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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程