Catégories :

Fonctions de date et d’heure

DATEADD

Ajoute la valeur spécifiée pour la partie de date ou d’heure spécifiée à une date, une heure ou un horodatage.

Alias :

TIMEADD, TIMESTAMPADD

Voir aussi :

ADD_MONTHS

Syntaxe

DATEADD( <date_or_time_part>, <value>, <date_or_time_expr> )
Copy

Arguments

date_or_time_part

Cela indique les unités de temps que vous souhaitez ajouter. Par exemple, si vous souhaitez ajouter deux jours, spécifiez day. Cette unité de mesure doit être l’une des valeurs répertoriées dans Parties de date et d’heure prises en charge.

value

C’est le nombre d’unités de temps que vous souhaitez ajouter. Par exemple, si les unités de temps sont day et que vous souhaitez ajouter deux jours, spécifiez 2. Si vous souhaitez soustraire deux jours, spécifiez -2.

date_or_time_expr

date_or_time_expr peut être une date, une heure ou un horodatage. Il s’agit de la date, de l’heure ou de l’horodatage auquel vous souhaitez ajouter un temps. Par exemple, si vous souhaitez ajouter deux jours au 1er août 2024, spécifiez '2024-08-01'::DATE.

Si le type de données est TIME, alors la date_or_time_part doit être exprimée en unités d’heures ou moins, et non en jours ou plus.

Si le type de données en entrée est DATE et que date_or_time_part est inférieure ou égale à des heures, la valeur d’entrée ne sera pas rejetée mais sera traitée comme un TIMESTAMP avec les heures, les minutes, les secondes et les fractions de seconde toutes initialement réglées sur 0 (par exemple, minuit à la date spécifiée).

Renvoie

Si date_or_time_expr est une heure, alors le type de données renvoyé est une heure.

Si date_or_time_expr est un horodatage, alors le type de données renvoyé est un horodatage.

Si date_or_time_expr est une date :

  • Si date_or_time_part est day ou supérieur (par exemple, month, year), la fonction renvoie une valeur DATE.

  • Si date_or_time_part est inférieur à un jour (par exemple, hour, minute, second), la fonction renvoie une valeur TIMESTAMP_NTZ, avec 00:00:00.000 comme heure de début, pour la date.

Notes sur l’utilisation

Lorsque date_or_time_part correspond à year, quarter, ou month (ou à l’une de leurs variations), si le mois de résultat possède moins de jours que le jour du mois originel, le jour du mois du résultat peut être différent du jour originel.

Exemples

Ajouter des années à une date :

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          |
+---------------+---------------------+

Soustraire des années d’une date :

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           |
+---------------+----------------------+

Ajoutez deux ans et deux heures à une date. Tout d’abord, définissez le format de sortie de l’horodatage, créez une table et insérez les données :

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

Exécutez une requête qui ajoute deux ans et deux heures à une date :

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  |
+---------------+---------------------+-------------------------+--------------------------+

Ajoutez un mois à une date dans un mois ayant le même nombre de jours ou plus que le mois résultant. Par exemple, si la date est le 31 janvier, l’ajout d’un mois ne devrait pas retourner le 31 février.

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

Ajouter un mois à une date dans un mois ayant un nombre de jours inférieur à celui du mois résultant. L’ajout d’un mois au 28 février renvoie le 28 mars.

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