Categorias:

Funções de data e hora

TIMESTAMPADD

Adiciona o valor especificado para a parte de data ou hora especificada a uma data, hora ou carimbo de data/hora.

Alias para DATEADD.

Sintaxe

TIMESTAMPADD( <date_or_time_part> , <time_value> , <date_or_time_expr> )
Copy

Argumentos

date_or_time_part

Isto indica as unidades de tempo que você deseja adicionar. Por exemplo, se você quiser adicionar 2 dias, então a unidade será DAY. Esta unidade de medida deve ser um dos valores listados em Partes de data e hora com suporte.

value

Este é o número de unidades de tempo que você deseja adicionar. Por exemplo, se você quiser acrescentar 2 dias, isto é 2.

date_or_time_expr

date_or_time_expr deve avaliar como uma data hora, ou carimbo de data/hora. Esta é a data, hora ou carimbo de data/hora a que você deseja adicionar. Por exemplo, se você quiser acrescentar 2 dias a 1º de agosto de 2018, então isto será '2018-08-01'::DATE.

Se o tipo de dados for TIME, então o date_or_time_part deverá estar em unidades de horas ou menor, não em dias ou maior.

Se o tipo de dados de entrada for DATE, e o date_or_time_part for hora ou menor, o valor de entrada não será rejeitado, mas será tratado como um TIMESTAMP com horas, minutos, segundos e frações de segundo todos inicialmente definidos como 0 (por exemplo, meia-noite na data especificada).

Retornos

Se date_or_time_expr for uma hora:

  • O tipo de dados de retorno é uma hora.

Se date_or_time_expr for um carimbo de data/hora:

  • O tipo de dados de retorno é um carimbo de data/hora.

Se date_or_time_expr for uma data:

  • Se date_or_time_part for day ou maior (por exemplo, month, year), a função retorna um valor DATE.

  • Se date_or_time_part for menor que um dia (por exemplo, hour, minute, second), a função retorna um valor TIMESTAMP_NTZ, com 00:00:00.000 como hora de início para a data.

Notas de uso

  • Quando date_or_time_part for year, quarter ou month (ou qualquer uma de suas variações), se o mês de resultado tiver menos dias do que o dia original do mês, o dia de resultado do mês poderá ser diferente do dia original.

Exemplos

Adicionar anos a uma data:

SELECT TO_DATE('2013-05-08') AS v1, DATEADD(year, 2, TO_DATE('2013-05-08')) AS v;
Copy

Saída:

+------------+------------+
| V1         | V          |
|------------+------------|
| 2013-05-08 | 2015-05-08 |
+------------+------------+
Copy

Adicionar 2 anos e 2 horas a uma data:

Configuração inicial deste exemplo e alguns exemplos subsequentes:

ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF9';
CREATE TABLE datetest (d date);
INSERT INTO datetest VALUES ('2013-04-05');
Copy

Consultar para adicionar 2 anos e 2 horas a uma data:

SELECT d AS "DATE", dateadd(year, 2, d) AS add_2_years, 
    dateadd(hour, 2, d) AS add_2_hours
  FROM datetest;
Copy

Saída:

+------------+-------------+-------------------------+
| DATE       | ADD_2_YEARS | ADD_2_HOURS             |
|------------+-------------+-------------------------|
| 2013-04-05 | 2015-04-05  | 2013-04-05 02:00:00.000 |
+------------+-------------+-------------------------+
Copy

Adicionar horas a um carimbo de data/hora:

SELECT TO_TIMESTAMP_LTZ('2013-05-08 11:22:33.444') AS v1,
  DATEADD(HOUR, 2, TO_TIMESTAMP_LTZ('2013-05-08 11:22:33.444')) AS v;
Copy

Saída:

+-------------------------------+-------------------------------+
| V1                            | V                             |
|-------------------------------+-------------------------------|
| 2013-05-08 11:22:33.444000000 | 2013-05-08 13:22:33.444000000 |
+-------------------------------+-------------------------------+
Copy

Adicionar um mês a uma data em um mês com o mesmo ou mais dias do que o mês resultante. Por exemplo, se a dia de hoje fosse 31 de janeiro, acrescentar um mês não deve resultar em “31 de fevereiro”.

SELECT DATEADD(MONTH, 1, '2000-01-31'::DATE) AS DIFFERENT_DAY;
Copy

Saída:

+---------------+
| DIFFERENT_DAY |
|---------------|
| 2000-02-29    |
+---------------+
Copy

Adicione um mês a uma data em um mês com menos dias do que o mês resultante. Adicionar um mês a 29 de fevereiro deve resultar em 29 de março, que é seguro.

SELECT DATEADD(MONTH, 1, '2000-02-29'::DATE) AS RESULT;
Copy

Saída:

+------------+
| RESULT     |
|------------|
| 2000-03-29 |
+------------+
Copy