时间类型
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 | 当前日期和时间 |
