Catégories :

Fonctions de date et d’heure

TIMESTAMPADD

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 pour DATEADD.

Syntaxe

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

Arguments

partie_date_ou_heure

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.

valeur

C’est le nombre d’unités de temps que vous souhaitez ajouter. Par exemple, si vous souhaitez ajouter 2 jours, ce sera 2.

expr_date_ou_heure

expr_date_ou_heure 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 partie_date_ou_heure 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 partie_date_ou_heure 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 expr_date_ou_heure est une heure :

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

Si expr_date_ou_heure est un horodatage :

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

Si expr_date_ou_heure est une date :

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

  • Si partie_date_ou_heure 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 partie_date_ou_heure 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;

Sortie :

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

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');

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;

Sortie :

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

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;

Sortie :

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

Ajoutez un mois à une date dans un mois ayant un même nombre de jours ou un nombre de jours supérieur à celui du mois résultant. Par exemple, si nous sommes le 31 janvier, ajouter un mois ne devrait NOT donner « 31 février ».

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

Sortie :

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

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;

Sortie :

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