PostgreSQL:时间——类型、运算符和函数

来源:这里教程网 时间:2026-03-14 20:13:35 作者:

时间类型

PostgreSQL 支持全套的 SQL 日期和时间类型,列于下表。根据公历日期计算。在这里,所有的类型有日期类型以外,其分辨率为 day1微秒/14位的解析度。

名称 存储长度 描述 低值 高值
timestamp [(p)] [without time zone ] 8 bytes 包括日期和时间,不带时区 4713 BC 294276 AD
timestamp [(p) ] with time zone 8 bytes 包括日期和时间,带时区 4713 BC 294276 AD
date 4 bytes 日期,但不含时间 4713 BC 5874897 AD
time [ (p)] [ without time zone ] 8 bytes 一天中的时间,不包含日期,不带时区 00:00:00 24:00:00
time [ (p)] with time zone 12 bytes 一天中的时间,不包含日期,带时区 00:00:00+1459 24:00:00-1459
interval [fields ] [(p) ] 12 bytes 时间间隔 -178000000 years 178000000 years

运算符

操作符 例子 结果
+ date '2001-09-28' + integer '7' date '2001-10-05'
+ date '2001-09-28' + interval '1 hour' t imestamp '2001-09-28 01:00'
+ date '2001-09-28' + time '03:00' timestamp '2001-09-28 03:00'
+ interval '1 day' + interval '1 hour' interval '1 day 01:00'
+ timestamp '2001-09-28 01:00' + interval '23 hours' timestamp '2001-09-29 00:00'
+ time '01:00' + interval '3 hours' time '04:00'
- - interval '23 hours' interval '-23:00'
- date '2001-10-01' - date '2001-09-28' integer '3'
- date '2001-10-01' - integer '7' date '2001-09-24'
- date '2001-09-28' - interval '1 hour' timestamp '2001-09-27 23:00'
- time '05:00' - time '03:00' interval '02:00'
- time '05:00' - interval '2 hours' time '03:00'
- timestamp '2001-09-28 23:00' - interval '23 hours' timestamp '2001-09-28 00:00'
- interval '1 day' - interval '1 hour' interval '23:00'
- timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' interval '1 day 15:00'
* interval '1 hour' * double precision '3.5' interval '03:30'
/ interval '1 hour' / double precision '1.5' interval '00:40'

函数

函数 返回类型 描述 例子 结果
age(timestamp, timestamp) interval 减去参数,生成一个使用年、月的"符号化"的结果 age('2001-04-10', timestamp '1957-06-13') 43 years 9 mons 27 days
age(timestamp) interval 从 current_date 减去得到的数值 age(timestamp '1957-06-13') 43 years 8 mons 3 days
current_date date 今天的日期
current_time time 现在的时间
current_timestamp timestamp 日期和时间
date_part(text, timestamp) double 获取子域(等效于extract) date_part('hour', timestamp '2001-02-16 20:38:40') 20
date_part(text, interval) double 获取子域(等效于extract) date_part('month', interval '2 years 3 months') 3
date_trunc(text, timestamp) timestamp 截断成指定的精度 date_trunc('hour', timestamp '2001-02-16 20:38:40') 2001-02-16 20:00:00+00
extract(field from timestamp) double 获取子域 extract(hour from timestamp '2001-02-16 20:38:40') 20
extract(field from interval) double 获取子域 extract(month from interval '2 years 3 months') 3
localtime time 今日的时间
localtimestamp timestamp 日期和时间
now() timestamp 当前的日期和时间(等效于 current_timestamp)
timeofday() text 当前日期和时间

相关推荐