PostgreSQL:時間——型別、運算子和函式

Ryan_Bai發表於2020-11-30

時間型別

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 當前日期和時間


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31490526/viewspace-2738263/,如需轉載,請註明出處,否則將追究法律責任。

相關文章