Partes da data para funções de data ou de timestamp
A tabela a seguir identifica os nomes e abreviações da parte da data e da hora que são aceitos como argumentos para as seguintes funções:
-
DATEADD
-
DATEDIFF
-
DATE_PART
-
EXTRACT
Parte da data ou parte da hora | Abreviações |
---|---|
milênio, milênios | mil, mils |
século, séculos | c, cent, cents |
década, décadas | dec, decs |
epoch | epoch (compatível com EXTRACT) |
ano, anos | y, yr, yrs |
trimestre, trimestres | qtr, qtrs |
mês, meses | mon, mons |
semana, semanas | w |
dia da semana |
dayofweek, dow, dw, weekday (compatível com DATE_PART e Função EXTRACT) Retorna um número inteiro de 0 a 6, começando com domingo. notaA parte da data DOW se comporta de maneira diferente da parte da data do dia da semana (D) usada para strings de formato de data e hora. D se baseia no números inteiros 1 a 7, onde domingo é 1. Para ter mais informações, consulte Strings de formato datetime. |
dia do ano | dayofyear, doy, dy, yearday (compatível com EXTRACT) |
dia, dias | d |
hora, horas | h, hr, hrs |
minuto, minutos | m, min, mins |
segundo, segundos | s, sec, secs |
milissegundo, milissegundos | ms, msec, msecs, msecond, mseconds, millisec, millisecs, millisecon |
microssegundo, microssegundos | microsec, microsecs, microsecond, usecond, useconds, us, usec, usecs |
timezone, timezone_hour, timezone_minute | Compatível com EXTRACT para timestamp somente com fuso horário (TIMESTAMPTZ). |
Variações nos resultados com segundos, milissegundos e microssegundos
Pequenas diferenças nos resultados de consultas ocorrem quando diferentes funções de data especificam segundos, milissegundos ou microssegundos como partes da data:
-
A função EXTRACT retorna números inteiros somente para a parte da data especificada, ignorando partes de data de níveis superiores e inferiores. Se a parte da data especificada é segundos, os milissegundos e os microssegundos não são incluídos no resultados. Se a parte da data especificada é milissegundos, segundos e microssegundos não são incluídos. Se a parte da data especificada é microssegundos, segundos e milissegundos não são incluídos.
-
A função DATE_PART retorna a parte completa de segundos do timestamp, independente da parte de data especificada, retornando um valor decimal ou um número inteiro conforme necessário.
Por exemplo, compare os resultados das consultas a seguir:
create table seconds(micro timestamp); insert into seconds values('2009-09-21 11:10:03.189717'); select extract(sec from micro) from seconds;
date_part ----------- 3
select date_part(sec, micro) from seconds;
pgdate_part ------------- 3.189717
Observações de CENTURY, EPOCH, DECADE e MIL
- CENTURY ou CENTURIES
-
O Amazon Redshift interpreta um CENTURY para começar com o ano ###1 e terminar com o ano
###0
:select extract (century from timestamp '2000-12-16 12:21:13');
date_part ----------- 20
select extract (century from timestamp '2001-12-16 12:21:13');
date_part ----------- 21
- EPOCH
-
A implementação do Amazon Redshift de EPOCH é relativa a 1970-01-01 00:00:00.000000 independente do fuso horário onde o cluster reside. Você pode precisar deslocar os resultados pela diferença em horas dependendo do fuso horário onde o cluster está localizado.
O exemplo a seguir faz o seguinte:
-
Cria uma tabela chamada EVENT_EXAMPLE com base na tabela EVENT. Este comando CREATE AS usa a função DATE_PART para criar uma coluna de data (chamada PGDATE_PART por padrão) para armazenar o valor de epoch para cada evento.
-
Seleciona a coluna e o tipo de dados de EVENT_EXAMPLE a partir de PG_TABLE_DEF.
-
Seleciona EVENTNAME, STARTTIME e PGDATE_PART a partir da tabela EVENT_EXAMPLE para visualizar os diferentes formatos de data e hora.
-
Seleciona EVENTNAME e STARTTIME a partir da tabela EVENT EXAMPLE na forma atual. Converte valores de epoch em PGDATE_PART usando um intervalo de 1 segundo para um timestamp sem fuso horário e retorna os resultados em uma coluna chamada CONVERTED_TIMESTAMP.
create table event_example as select eventname, starttime, date_part(epoch, starttime) from event; select "column", type from pg_table_def where tablename='event_example';
column | type ---------------+----------------------------- eventname | character varying(200) starttime | timestamp without time zone pgdate_part | double precision (3 rows)
select eventname, starttime, pgdate_part from event_example;
eventname | starttime | pgdate_part ----------------------+---------------------+------------- Mamma Mia! | 2008-01-01 20:00:00 | 1199217600 Spring Awakening | 2008-01-01 15:00:00 | 1199199600 Nas | 2008-01-01 14:30:00 | 1199197800 Hannah Montana | 2008-01-01 19:30:00 | 1199215800 K.D. Lang | 2008-01-01 15:00:00 | 1199199600 Spamalot | 2008-01-02 20:00:00 | 1199304000 Macbeth | 2008-01-02 15:00:00 | 1199286000 The Cherry Orchard | 2008-01-02 14:30:00 | 1199284200 Macbeth | 2008-01-02 19:30:00 | 1199302200 Demi Lovato | 2008-01-02 19:30:00 | 1199302200
select eventname, starttime, timestamp with time zone 'epoch' + pgdate_part * interval '1 second' AS converted_timestamp from event_example;
eventname | starttime | converted_timestamp ----------------------+---------------------+--------------------- Mamma Mia! | 2008-01-01 20:00:00 | 2008-01-01 20:00:00 Spring Awakening | 2008-01-01 15:00:00 | 2008-01-01 15:00:00 Nas | 2008-01-01 14:30:00 | 2008-01-01 14:30:00 Hannah Montana | 2008-01-01 19:30:00 | 2008-01-01 19:30:00 K.D. Lang | 2008-01-01 15:00:00 | 2008-01-01 15:00:00 Spamalot | 2008-01-02 20:00:00 | 2008-01-02 20:00:00 Macbeth | 2008-01-02 15:00:00 | 2008-01-02 15:00:00 The Cherry Orchard | 2008-01-02 14:30:00 | 2008-01-02 14:30:00 Macbeth | 2008-01-02 19:30:00 | 2008-01-02 19:30:00 Demi Lovato | 2008-01-02 19:30:00 | 2008-01-02 19:30:00 ...
-
- DECADE ou DECADES
-
O Amazon Redshift interpreta DECADE or DECADES DATEPART com base no calendário comum. Por exemplo, como o calendário comum começa a partir do ano 1, a primeira década (década 1) é 0001-01-01 a 0009-12-31 e a segunda década (década 2) é 0010-01-01 a 0019-12-31. Por exemplo, a década 201 vai de 2000-01-01 a 2009-12-31:
select extract(decade from timestamp '1999-02-16 20:38:40');
date_part ----------- 200
select extract(decade from timestamp '2000-02-16 20:38:40');
date_part ----------- 201
select extract(decade from timestamp '2010-02-16 20:38:40');
date_part ----------- 202
- MIL ou MILS
-
O Amazon Redshift interpreta que um MIL começa no primeiro dia do ano #001 e termina no último dia do ano
#000
:select extract (mil from timestamp '2000-12-16 12:21:13');
date_part ----------- 2
select extract (mil from timestamp '2001-12-16 12:21:13');
date_part ----------- 3