English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PostgreSQL 基础教程

PostgreSQL 高级教程

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 dia 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'

日期/时间函数

函数返回类型描述实例结果
age(timestamp, timestamp)interval减去参数后的"符号化"结果,使用年和月,不只是使用天age(timestamp '2001-04-10', timestamp '1957-06-13')43 anos 9 mons 27 days
age(timestamp)interval从current_date减去参数后的结果(在午夜)age(timestamp '1957-06-13')43 anos 8 mons 3 days
clock_timestamptimestamp with time zoneO timestamp atual do relógio em tempo real (muda no momento da execução da sentença)  
current_datedateA data atual;  
current_timetempo com fuso horárioTempo atual do dia;  
current_timestamptimestamp with time zoneTimestamp do início da transação atual;  
date_part(text, timestamp)double precisionObtenha o subdomínio (equivalente a extract);date_part('hour', timestamp '2001-02-16 20:38:40')20
date_part(text, interval)double precisionObtenha o subdomínio (equivalente a extract);date_part('month', interval '2 anos 3 months')3
date_trunc(text, timestamp)timestampCorte para a precisão especificada;date_trunc('hour', timestamp '2001-02-16 20:38:40')2001-02-16 20:00:00
date_trunc(text, interval)intervalCorte para a precisão especificada,date_trunc('hour', interval '2 days 3 horas 40 minutos')2 dias 03:00:00
extract(field from         timestamp)double precisionObtenha o subdomínio;extract(hour from timestamp '2001-02-16 20:38:40')20
extract(field from         interval)double precisionObtenha o subdomínio;extract(month from interval '2 anos 3 months')3
isfinite(date)booleanTeste se é uma data finita (não +/-infinito)isfinite(date '2001-02-16')true
isfinite(timestamp)booleanTeste se é um timestamp finito (não +/-infinito)isfinite(timestamp '2001-02-16 21:28:30')true
isfinite(interval)booleanTeste se é um intervalo de tempo finitoisfinite(interval '4 hours')true
justify_days(interval)intervalSegundo cada mês 30 dias ajuste de intervalojustify_days(interval '35 days')1 mon 5 days
justify_hours(interval)intervalSegundo cada dia 24 Ajuste de intervalo de horasjustify_hours(interval '27 hours')1 dia 03:00:00
justify_interval(interval)intervalAjuste a intervalo de tempo usando justify_days e justify_hours, ao mesmo tempo ajuste os sinais positivos e negativosjustify_interval(interval '1 mon -1 hour')29 days 23:00:00
localtimetimeTempo atual do dia;  
localtimestamptimestampTimestamp do início da transação atual;  
            make_date(year int,             month int,             day int) dateCria uma data para os campos ano, mês e diamake_date(2013, 7, 15)2013-07-15
          make_interval(years int DEFAULT 0,           months int DEFAULT 0,           weeks int DEFAULT 0,           days int DEFAULT 0,           hours int DEFAULT 0,           mins int DEFAULT 0,           secs double precision DEFAULT 0.0)           intervalCria um intervalo a partir dos campos ano, mês, semana, dia, hora, minuto e segundomake_interval(days := 10)10 days
          make_time(hour int,           min int,           sec double precision)           timeCria um tempo a partir dos campos hora, minuto e segundomake_time(8, 15, 23.5)08:15:23.5
          make_timestamp(year int,           month int,           day int,           hour int,           min int,           sec double precision)           timestampCria um timestamp a partir dos campos ano, mês, dia, hora, minuto e segundomake_timestamp(2013, 7, 15, 8, 15, 23.5)2013-07-15 08:15:23.5
          make_timestamptz(year int,           month int,           day int,           hour int,           min int,           sec double precision,           [ timezone text ])           timestamp with time zoneCria um timestamp com timezone a partir dos campos ano, mês, dia, hora, minuto e segundo.         Se não for especificado timezone, usa o timezone atual.make_timestamptz(2013, 7, 15, 8, 15, 23.5)2013-07-15 08:15:23.5+01
now()timestamp with time zoneTimestamp do início da transação atual;  
statement_timestamp()timestamp with time zoneTimestamp do relógio de tempo real atual;  
timeofday()textIgual a clock_timestamp, mas o resultado é um text string;  
transaction_timestamp()timestamp with time zoneTimestamp do início da transação atual;