我们在数据类型一章中讨论了日期/时间数据类型。 现在,让我们看看日期/时间运算符和函数。
下表列出了基本算术运算符的行为 −
| 运算符 | 示例 | 结果 | 
|---|---|---|
| + | 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
 调整间隔  | 
| 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()。  | 
| 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 选择截断输入值的精度。 返回值的类型为 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 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)
| 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)
| 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
科技资讯
1
2
3
4
5
6
7
8
9
精选课程
							
							共5课时
17.2万人学习
							
							共49课时
77万人学习
							
							共29课时
61.7万人学习
							
							共25课时
39.3万人学习
							
							共43课时
70.9万人学习
							
							共25课时
61.6万人学习
							
							共22课时
23万人学习
							
							共28课时
33.9万人学习
							
							共89课时
125万人学习