Categorias:

Funções de data e hora

TIMEADD

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

TIMEADD( <date_or_time_part> , <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 dois dias, especifique 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 a unidade de tempo for day, e você quiser adicionar dois dias, especifique 2. Se você quiser subtrair dois dias, especifique -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 adicionar dois dias a 1º de agosto de 2024, especifique '2024-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 um segundo, todos inicialmente definidos como 0 (por exemplo, meia-noite na data especificada).

Retornos

Se date_or_time_expr for um horário, então o tipo de dados de retorno será um horário.

Se date_or_time_expr for um carimbo de data/hora, então o tipo de dados de retorno será 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 retornará um valor TIMESTAMP_NTZ, com 00:00:00.000 como hora inicial da 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('2022-05-08') AS original_date,
       DATEADD(year, 2, TO_DATE('2022-05-08')) AS date_plus_two_years;
Copy
+---------------+---------------------+
| ORIGINAL_DATE | DATE_PLUS_TWO_YEARS |
|---------------+---------------------|
| 2022-05-08    | 2024-05-08          |
+---------------+---------------------+

Subtração de anos de uma data:

SELECT TO_DATE('2022-05-08') AS original_date,
       DATEADD(year, -2, TO_DATE('2022-05-08')) AS date_minus_two_years;
Copy
+---------------+----------------------+
| ORIGINAL_DATE | DATE_MINUS_TWO_YEARS |
|---------------+----------------------|
| 2022-05-08    | 2020-05-08           |
+---------------+----------------------+

Adicione dois anos e duas horas a uma data. Primeiro, defina o formato de saída do carimbo de data/hora, crie uma tabela e insira os dados:

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

Execute uma consulta que adicione dois anos e duas horas a uma data:

SELECT d AS original_date,
       DATEADD(year, 2, d) AS date_plus_two_years,
       TO_TIMESTAMP(d) AS original_timestamp,
       DATEADD(hour, 2, d) AS timestamp_plus_two_hours
  FROM datetest;
Copy
+---------------+---------------------+-------------------------+--------------------------+
| ORIGINAL_DATE | DATE_PLUS_TWO_YEARS | ORIGINAL_TIMESTAMP      | TIMESTAMP_PLUS_TWO_HOURS |
|---------------+---------------------+-------------------------+--------------------------|
| 2022-04-05    | 2024-04-05          | 2022-04-05 00:00:00.000 | 2022-04-05 02:00:00.000  |
+---------------+---------------------+-------------------------+--------------------------+

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 data for 31 de janeiro, adicionar um mês não deve retornar 31 de fevereiro.

SELECT DATEADD(month, 1, '2023-01-31'::DATE) AS date_plus_one_month;
Copy
+---------------------+
| DATE_PLUS_ONE_MONTH |
|---------------------|
| 2023-02-28          |
+---------------------+

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 28 de fevereiro retorna 28 de março.

SELECT DATEADD(month, 1, '2023-02-28'::DATE) AS date_plus_one_month;
Copy
+---------------------+
| DATE_PLUS_ONE_MONTH |
|---------------------|
| 2023-03-28          |
+---------------------+