- Catégories :
DATE_TRUNC¶
Tronque une valeur DATE, TIME ou TIMESTAMP à la précision spécifiée. Par exemple, si vous tronquez un horodatage jusqu’au quart, cela renvoie l’horodatage correspondant à minuit du premier jour du trimestre de l’horodatage d’origine.
Cette fonction fournit une syntaxe alternative pour TRUNC en inversant les deux arguments.
Notez qu’une troncation n’est pas la même chose qu’une extraction. Par exemple :
La troncation d’un horodatage jusqu’au trimestre à l’aide de cette fonction renvoie l’horodatage correspondant à minuit du premier jour du trimestre de l’horodatage saisi.
L’extraction de la partie date du trimestre d’un horodatage à l’aide de la fonction EXTRACT renvoie le numéro de trimestre de l’année dans l’horodatage.
Syntaxe¶
DATE_TRUNC( <date_or_time_part>, <date_or_time_expr> )
Arguments¶
date_or_time_part
Cet argument doit être l’une des valeurs répertoriées dans Parties de date et d’heure prises en charge.
date_or_time_expr
Cet argument doit être évalué sur une date, une heure ou un horodatage.
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¶
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.
Exemples¶
Les exemples de la fonction DATE_TRUNC utilisent les données du tableau suivant :
CREATE OR REPLACE TABLE test_date_trunc (
mydate DATE,
mytime TIME,
mytimestamp TIMESTAMP);
INSERT INTO test_date_trunc VALUES (
'2024-05-09',
'08:50:48',
'2024-05-09 08:50:57.891 -0700');
SELECT * FROM test_date_trunc;
+------------+----------+-------------------------+
| MYDATE | MYTIME | MYTIMESTAMP |
|------------+----------+-------------------------|
| 2024-05-09 | 08:50:48 | 2024-05-09 08:50:57.891 |
+------------+----------+-------------------------+
Les exemples suivants montrent la troncation de la date. Dans tous les cas, la valeur renvoyée est du même type de données que la valeur d’entrée, mais avec des zéros pour les portions telles que les fractions de secondes qui ont été tronquées :
Tronquez une date en année, mois et jour :
SELECT mydate AS "DATE",
DATE_TRUNC('year', mydate) AS "TRUNCATED TO YEAR",
DATE_TRUNC('month', mydate) AS "TRUNCATED TO MONTH",
DATE_TRUNC('week', mydate) AS "TRUNCATED TO WEEK",
DATE_TRUNC('day', mydate) AS "TRUNCATED TO DAY"
FROM test_date_trunc;
+------------+-------------------+--------------------+-------------------+------------------+
| DATE | TRUNCATED TO YEAR | TRUNCATED TO MONTH | TRUNCATED TO WEEK | TRUNCATED TO DAY |
|------------+-------------------+--------------------+-------------------+------------------|
| 2024-05-09 | 2024-01-01 | 2024-05-01 | 2024-05-06 | 2024-05-09 |
+------------+-------------------+--------------------+-------------------+------------------+
Tronquez une heure en minute :
SELECT mytime AS "TIME",
DATE_TRUNC('minute', mytime) AS "TRUNCATED TO MINUTE"
FROM test_date_trunc;
+----------+---------------------+
| TIME | TRUNCATED TO MINUTE |
|----------+---------------------|
| 08:50:48 | 08:50:00 |
+----------+---------------------+
Tronquez un TIMESTAMP en heure, minute et seconde :
SELECT mytimestamp AS "TIMESTAMP",
DATE_TRUNC('hour', mytimestamp) AS "TRUNCATED TO HOUR",
DATE_TRUNC('minute', mytimestamp) AS "TRUNCATED TO MINUTE",
DATE_TRUNC('second', mytimestamp) AS "TRUNCATED TO SECOND"
FROM test_date_trunc;
+-------------------------+-------------------------+-------------------------+-------------------------+
| TIMESTAMP | TRUNCATED TO HOUR | TRUNCATED TO MINUTE | TRUNCATED TO SECOND |
|-------------------------+-------------------------+-------------------------+-------------------------|
| 2024-05-09 08:50:57.891 | 2024-05-09 08:00:00.000 | 2024-05-09 08:50:00.000 | 2024-05-09 08:50:57.000 |
+-------------------------+-------------------------+-------------------------+-------------------------+
Comparez la fonction DATE_TRUNC à la fonction EXTRACT :
SELECT DATE_TRUNC('quarter', mytimestamp) AS "TRUNCATED",
EXTRACT('quarter', mytimestamp) AS "EXTRACTED"
FROM test_date_trunc;
+-------------------------+-----------+
| TRUNCATED | EXTRACTED |
|-------------------------+-----------|
| 2024-04-01 00:00:00.000 | 2 |
+-------------------------+-----------+