Catégories :

Fonctions de date et d’heure

DATE_TRUNC

Tronque un DATE, TIME ou TIMESTAMP à la précision spécifiée.

Notez que la troncation n’est pas la même chose que l’extraction. Par exemple :

  • En tronquant l’horodatage jusqu’au trimestre, on obtient l’horodatage correspondant à minuit du premier jour du trimestre pour l’horodatage entré.

  • L’extraction de la partie de date du trimestre d’un horodatage renvoie le numéro de trimestre de l’année dans l’horodatage.

Alternatives :

TRUNC

Voir aussi :

DATE_PART , EXTRACT

Syntaxe

DATE_TRUNC( <date_or_time_part>, <date_or_time_expr> )
Copy

Renvoie

La valeur renvoyée est du même type que la valeur d’entrée.

Par exemple, si la valeur d’entrée est un TIMESTAMP, la valeur renvoyée est un TIMESTAMP.

Notes sur l’utilisation

Exemples

Tronquez une date (d’un horodatage) en année, mois et jour :

SELECT TO_DATE('2015-05-08T23:39:20.123-07:00') AS "DATE1",
       DATE_TRUNC('YEAR', "DATE1") AS "TRUNCATED TO YEAR",
       DATE_TRUNC('MONTH', "DATE1") AS "TRUNCATED TO MONTH",
       DATE_TRUNC('DAY', "DATE1") AS "TRUNCATED TO DAY";
+------------+-------------------+--------------------+------------------+
| DATE1      | TRUNCATED TO YEAR | TRUNCATED TO MONTH | TRUNCATED TO DAY |
|------------+-------------------+--------------------+------------------|
| 2015-05-08 | 2015-01-01        | 2015-05-01         | 2015-05-08       |
+------------+-------------------+--------------------+------------------+
Copy

Tronquez un TIMESTAMP en heure, minute et seconde : Notez que dans tous les cas, la valeur renvoyée est un TIMESTAMP, mais avec des zéros pour les portions (par exemple, des fractions de seconde) qui ont été tronquées :

SELECT TO_TIMESTAMP('2015-05-08T23:39:20.123-07:00') AS "TIMESTAMP1",
       DATE_TRUNC('HOUR', "TIMESTAMP1") AS "TRUNCATED TO HOUR",
       DATE_TRUNC('MINUTE', "TIMESTAMP1") AS "TRUNCATED TO MINUTE",
       DATE_TRUNC('SECOND', "TIMESTAMP1") AS "TRUNCATED TO SECOND";
+-------------------------+-------------------------+-------------------------+-------------------------+
| TIMESTAMP1              | TRUNCATED TO HOUR       | TRUNCATED TO MINUTE     | TRUNCATED TO SECOND     |
|-------------------------+-------------------------+-------------------------+-------------------------|
| 2015-05-08 23:39:20.123 | 2015-05-08 23:00:00.000 | 2015-05-08 23:39:00.000 | 2015-05-08 23:39:20.000 |
+-------------------------+-------------------------+-------------------------+-------------------------+
Copy

Tronquez une heure en minute :

SELECT TO_TIME('23:39:20.123') AS "TIME1",
       DATE_TRUNC('MINUTE', "TIME1") AS "TRUNCATED TO MINUTE";
+----------+---------------------+
| TIME1    | TRUNCATED TO MINUTE |
|----------+---------------------|
| 23:39:20 | 23:39:00            |
+----------+---------------------+
Copy

Comparatif troncation avec extraction :

SELECT DATE_TRUNC('QUARTER', '2019-08-01 12:34:56.789'::TIMESTAMP_NTZ) AS "TRUNCATED",
       EXTRACT(   'QUARTER', '2019-08-01 12:34:56.789'::TIMESTAMP_NTZ) AS "EXTRACTED";
+-------------------------+-----------+
| TRUNCATED               | EXTRACTED |
|-------------------------+-----------|
| 2019-07-01 00:00:00.000 |         3 |
+-------------------------+-----------+
Copy