- Catégories :
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.
Syntaxe¶
DATE_TRUNC( <date_or_time_part>, <date_or_time_expr> )
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¶
date_or_time_part
doit être l’une des valeurs répertoriées dans Parties de date et d’heure prises en charge.Lorsque
date_or_time_part
correspond àweek
(ou à l’une de ses variantes), la sortie est contrôlée par le paramètre de session WEEK_START. Pour plus de détails, y compris des exemples, voir Semaines civiles et jours de semaine.date_or_time_expr
peut être une date, une heure ou un horodatage.
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 | +------------+-------------------+--------------------+------------------+
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 | +-------------------------+-------------------------+-------------------------+-------------------------+
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 | +----------+---------------------+
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 | +-------------------------+-----------+