- Catégories :
TRUNCATE, 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 DATE_TRUNC en inversant les deux arguments.
Les fonctions TRUNCATE et TRUNC sont synonymes.
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.
Note
TRUNC est surchargé. Il peut également être utilisé avec des valeurs numériques pour réduire le nombre de chiffres significatifs, par exemple en tronquant une valeur décimale en un entier. La fonction TRUNC numérique comporte un paramètre obligatoire et un paramètre facultatif. La fonction TRUNC date/heure comporte deux paramètres obligatoires.
- Alternatives :
- Voir aussi :
Syntaxe¶
TRUNC( <date_or_time_expr>, <date_or_time_part> )
Arguments¶
date_or_time_expr
Cet argument doit être évalué sur une date, une heure ou un horodatage.
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.
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.Pour les valeurs TIME, vous ne pouvez pas spécifier un
date_or_time_part
qui est en dehors du champ d’application du type TIME. Par exemple, vous pouvez tronquer une valeur TIMESTAMP enday
,week
,year
, et ainsi de suite, car le type TIMESTAMP encode la date et l’heure avec la précision requise. Cependant, si vous essayez de tronquer une valeur TIME enday
,week
,year
, et ainsi de suite, vous obtenez une erreur.
Exemples¶
Les exemples suivants présentent la fonction TRUNC ou TRUNCATE pour les valeurs de date et d’heure. Pour des exemples de troncature de valeurs numériques, voir la forme numérique de TRUNC.
Les exemples de la fonction 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 valeur DATE en année, mois et jour :
SELECT mydate AS "DATE",
TRUNC(mydate, 'year') AS "TRUNCATED TO YEAR",
TRUNC(mydate, 'month') AS "TRUNCATED TO MONTH",
TRUNC(mydate, 'day') AS "TRUNCATED TO DAY"
FROM test_date_trunc;
+------------+-------------------+--------------------+------------------+
| DATE | TRUNCATED TO YEAR | TRUNCATED TO MONTH | TRUNCATED TO DAY |
|------------+-------------------+--------------------+------------------|
| 2024-05-09 | 2024-01-01 | 2024-05-01 | 2024-05-09 |
+------------+-------------------+--------------------+------------------+
Tronquez une valeur TIME en minute :
SELECT mytime AS "TIME",
TRUNCATE(mytime, 'minute') AS "TRUNCATED TO MINUTE"
FROM test_date_trunc;
+----------+---------------------+
| TIME | TRUNCATED TO MINUTE |
|----------+---------------------|
| 08:50:48 | 08:50:00 |
+----------+---------------------+
Tronquez une valeur TIMESTAMP en heure, minute et seconde :
SELECT mytimestamp AS "TIMESTAMP",
TRUNCATE(mytimestamp, 'hour') AS "TRUNCATED TO HOUR",
TRUNCATE(mytimestamp, 'minute') AS "TRUNCATED TO MINUTE",
TRUNCATE(mytimestamp, 'second') 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 TRUNC à la fonction EXTRACT :
SELECT TRUNC(mytimestamp, 'quarter') AS "TRUNCATED",
EXTRACT('quarter', mytimestamp) AS "EXTRACTED"
FROM test_date_trunc;
+-------------------------+-----------+
| TRUNCATED | EXTRACTED |
|-------------------------+-----------|
| 2024-04-01 00:00:00.000 | 2 |
+-------------------------+-----------+