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 2 jours, il s’agira de 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 vous souhaitez ajouter 2 jours, ce sera 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 2 jours au 1er août 2018, il s’agira alors de '2018-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 la 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 :

  • Le type de données renvoyé est une heure.

Si date_or_time_expr est un horodatage :

  • Le type de données renvoyé est un horodatage.

Si date_or_time_expr est une date :

  • Si date_or_time_part est égal ou supérieur à day (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('2013-05-08') AS v1, DATEADD(year, 2, TO_DATE('2013-05-08')) AS v;
Copy

Sortie :

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

Ajoutez 2 ans et 2 heures à une date :

Configuration initiale de cet exemple et des exemples suivants :

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

Requête pour ajouter 2 ans et 2 heures à une date :

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

Sortie :

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

Ajoutez des heures à un horodatage :

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

Sortie :

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

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 nous sommes le 31 janvier, ajouter un mois ne devrait pas donner « 31 février ».

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

Sortie :

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

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 29 février devrait nous donner le 29 mars, ce qui ne pose pas de problème.

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

Sortie :

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