View a markdown version of this page

Função DATEADD - Amazon Redshift

O Amazon Redshift deixará de oferecer suporte ao uso de UDFs em Python após 30 de junho de 2026. Começaremos a aplicar essa alteração em fases. Consulte mais informações sobre os detalhes do fim da vida útil do Python e as opções de migração na publicação do blog publicada em 30 de junho de 2025.

Função DATEADD

Incrementa um valor DATE, TIME, TIMETZ ou TIMESTAMP com um intervalo especificado.

Sintaxe

DATEADD( datepart, interval, {date|time|timetz|timestamp} )

Argumentos

datepart

A parte da data (ano, mês, dia ou hora, por exemplo) sobre a qual a função atua. Para obter mais informações, consulte Partes da data para funções de data ou de timestamp.

intervalo

Um número inteiro que especificou o intervalo (número de dias, por exemplo) a adicionar à expressão de destino. Um número inteiro negativo subtrai o intervalo.

date|time|timetz|timestamp

Uma coluna DATE, TIME, TIMETZ ou TIMESTAMP ou uma expressão que converta implicitamente para DATE, TIME, TIMETZ ou TIMESTAMP A expressão DATE, TIME, TIMETZ ou TIMESTAMP deve conter a parte de data especificada.

Tipo de retorno

TIMESTAMP, TIME ou TIMETZ, dependendo do tipo de dados de entrada.

Exemplos com uma coluna DATE

O exemplo a seguir adiciona 30 dias a cada data em novembro que existe na tabela DATE.

select dateadd(day,30,caldate) as novplus30 from date where month='NOV' order by dateid; novplus30 --------------------- 2008-12-01 00:00:00 2008-12-02 00:00:00 2008-12-03 00:00:00 ... (30 rows)

O exemplo a seguir adiciona 18 meses a um valor de data literal.

select dateadd(month,18,'2008-02-28'); date_add --------------------- 2009-08-28 00:00:00 (1 row)

O nome padrão da coluna para uma função DATEADD é DATE_ADD. O timestamp padrão para um valor de data é 00:00:00.

O exemplo a seguir adiciona 30 minutos a um valor de data que não especifica um timestamp.

select dateadd(m,30,'2008-02-28'); date_add --------------------- 2008-02-28 00:30:00 (1 row)

Você pode nomear as partes da data por completo ou abreviá-las. Neste caso, m significa minutos, não meses.

Exemplos com uma coluna TIME

O TIME_TEST da tabela a seguir tem uma coluna TIME_VAL (tipo TIME) com três valores inseridos.

select time_val from time_test; time_val --------------------- 20:00:00 00:00:00.5550 00:58:00

O exemplo a seguir adiciona 5 minutos a cada TIME_VAL na tabela TIME_TEST.

select dateadd(minute,5,time_val) as minplus5 from time_test; minplus5 --------------- 20:05:00 00:05:00.5550 01:03:00

O exemplo a seguir adiciona 8 horas a um valor de tempo literal.

select dateadd(hour, 8, time '13:24:55'); date_add --------------- 21:24:55

O exemplo a seguir mostra quando um tempo passa por 24:00:00 ou abaixo de 00:00:00.

select dateadd(hour, 12, time '13:24:55'); date_add --------------- 01:24:55

Exemplos com uma coluna TIMETZ

Os valores de saída nestes exemplos estão em UTC, que é o fuso horário padrão.

O TIMETZ_TEST da tabela de exemplo a seguir tem uma coluna TIMETZ_VAL (tipo TIMETZ) com três valores inseridos.

select timetz_val from timetz_test; timetz_val ------------------ 04:00:00+00 00:00:00.5550+00 05:58:00+00

O exemplo a seguir adiciona 5 minutos a cada TIMETZ_VAL na tabela TIMETZ_TEST.

select dateadd(minute,5,timetz_val) as minplus5_tz from timetz_test; minplus5_tz --------------- 04:05:00+00 00:05:00.5550+00 06:03:00+00

O exemplo a seguir adiciona 2 horas a um valor timetz literal.

select dateadd(hour, 2, timetz '13:24:55 PST'); date_add --------------- 23:24:55+00

Exemplos com uma coluna TIMESTAMP

Os valores de saída nestes exemplos estão em UTC, que é o fuso horário padrão.

O exemplo de tabela TIMESTAMP_TEST a seguir tem uma coluna TIMESTAMP_VAL (tipo TIMESTAMP) com três valores inseridos.

SELECT timestamp_val FROM timestamp_test; timestamp_val ------------------ 1988-05-15 10:23:31 2021-03-18 17:20:41 2023-06-02 18:11:12

O exemplo a seguir adiciona 20 anos somente aos valores de TIMESTAMP_VAL em TIMESTAMP_TEST anteriores ao ano 2000.

SELECT dateadd(year,20,timestamp_val) FROM timestamp_test WHERE timestamp_val < to_timestamp('2000-01-01 00:00:00', 'YYYY-MM-DD HH:MI:SS'); date_add --------------- 2008-05-15 10:23:31

O exemplo a seguir adiciona 5 segundos a um valor literal de carimbo de data/hora gravado sem um indicador de segundos.

SELECT dateadd(second, 5, timestamp '2001-06-06'); date_add --------------- 2001-06-06 00:00:05

Observações de uso

As funções DATEADD(month, …) e ADD_MONTHS lidam com datas que caiam no final do mês de forma diferente.

  • ADD_MONTHS: Se a data que você estiver adicionando for o último dia do mês, o resultado será sempre o último dia do mês do resultado, independentemente do tamanho do mês. Por exemplo, 30 de abril + 1 mês é o dia 31 de maio.

    select add_months('2008-04-30',1); add_months --------------------- 2008-05-31 00:00:00 (1 row)
  • DATEADD: Se houver menos dias na data que você está adicionando do que no mês de resultado, o resultado será o dia correspondente do mês de resultado, não o último dia desse mês. Por exemplo, 30 de abril + 1 mês é o dia 30 de maio.

    select dateadd(month,1,'2008-04-30'); date_add --------------------- 2008-05-30 00:00:00 (1 row)

A função DATEADD lida com a data de ano bissexto 02-29 de forma diferente ao usar dateadd(month, 12,…) ou dateadd(year, 1, …).

select dateadd(month,12,'2016-02-29'); date_add --------------------- 2017-02-28 00:00:00 select dateadd(year, 1, '2016-02-29'); date_add --------------------- 2017-03-01 00:00:00