La fonction TRUNC_TIME tronque une valeur de date ou d'heure à l'unité temporelle spécifiée et renvoie une chaîne de caractères (STRING).
Syntaxe
STRING TRUNC_TIME(DATE|DATETIME|TIMESTAMP|TIMESTAMP_NTZ <date>, STRING <date_part>)
-- Returns 2025-06.
SELECT TRUNC_TIME(DATETIME '2025-06-10 14:20:30', 'month');
Paramètres
date
Obligatoire. Date ou horodatage à tronquer. Types acceptés : DATE, DATETIME, TIMESTAMP et TIMESTAMP_NTZ.
Dans la version 1.0 des types de données, le paramètre date accepte également une valeur STRING au format DATETIME (par exemple, yyyy-mm-dd hh:mi:ss, comme 2025-07-21 00:00:00). Le système convertit implicitement cette valeur en type DATETIME avant le calcul.
date_part
Obligatoire. Unité temporelle de troncature. Doit être une constante de type STRING, sans sensibilité à la casse.
|
Valeur |
Tronque jusqu'à |
Format de sortie |
|
|
Début de l'année — supprime le mois, le jour et l'heure |
|
|
|
Début du mois — supprime le jour et l'heure |
|
|
|
Début du jour — supprime la composante horaire |
|
|
|
Début de l'heure — supprime les minutes et les secondes |
|
Valeur de retour
Renvoie toujours une chaîne de type STRING. Le format de sortie dépend du paramètre date_part, comme indiqué dans le tableau ci-dessus.
Contrairement aux fonctions qui conservent le type d'entrée,TRUNC_TIMErenvoie systématiquement une chaîneSTRING, que l'entrée soit de typeDATE,DATETIME,TIMESTAMPouTIMESTAMP_NTZ.
Notes d'utilisation
Conversion de fuseau horaire pour les types liés aux fuseaux horaires
Pour les types de données associés aux fuseaux horaires, tels que DATETIME et TIMESTAMP, la fonction TRUNC_TIME convertit d'abord l'heure locale en UTC, puis tronque selon le paramètre date_part avant de renvoyer le résultat sous forme de chaîne. La date de sortie peut donc différer de la date locale.
Par exemple, la valeur DATETIME '2025-06-03 07:15:08' en UTC+8 correspond à 2025-06-02 23:15:08 en UTC. Une troncature à l'unité day renvoie alors 2025-06-02 et non 2025-06-03.
Différence entre troncature et extraction
Ne confondez pas troncature et extraction. La fonction TRUNC_TIME arrondit un horodatage à la borne temporelle inférieure et renvoie une chaîne. Pour extraire une composante spécifique (comme le numéro de l'année ou du mois) sous forme d'entier, utilisez une fonction d'extraction de date. Pour plus d'informations, consultez la page Fonctions de date.
Cas d'erreur
Si le paramètre
daten'est pas de l'un des types pris en charge (DATE,DATETIME,TIMESTAMPouTIMESTAMP_NTZ), le système renvoie une erreur.Si le paramètre
date_parta la valeurNULL, le système renvoie une erreur.
Exemples
Entrée de type DATETIME
Le fuseau horaire de la session est défini sur UTC+8 (Asia/Shanghai). Avant la troncature, le système convertit l'entrée DATETIME '2025-06-03 07:15:08' en UTC, ce qui donne 2025-06-02 23:15:08.
SET odps.sql.timezone=Asia/Shanghai;
SELECT
TRUNC_TIME(DATETIME '2025-06-03 07:15:08', 'year') AS truncated_to_year,
TRUNC_TIME(DATETIME '2025-06-03 07:15:08', 'month') AS truncated_to_month,
TRUNC_TIME(DATETIME '2025-06-03 07:15:08', 'day') AS truncated_to_day,
TRUNC_TIME(DATETIME '2025-06-03 07:15:08', 'hour') AS truncated_to_hour;
-- Result:
+--------------------+--------------------+--------------------+---------------------+
| truncated_to_year | truncated_to_month | truncated_to_day | truncated_to_hour |
+--------------------+--------------------+--------------------+---------------------+
| 2025 | 2025-06 | 2025-06-02 | 2025-06-02 23:00:00 |
+--------------------+--------------------+--------------------+---------------------+
Entrée de type DATE
SELECT
TRUNC_TIME(DATE '2025-06-10', 'year') AS truncated_to_year,
TRUNC_TIME(DATE '2025-06-10', 'month') AS truncated_to_month,
TRUNC_TIME(DATE '2025-06-10', 'day') AS truncated_to_day;
-- Result:
+--------------------+--------------------+------------------+
| truncated_to_year | truncated_to_month | truncated_to_day |
+--------------------+--------------------+------------------+
| 2025 | 2025-06 | 2025-06-10 |
+--------------------+--------------------+------------------+
Entrée de type STRING (uniquement pour l'édition V1.0 des types de données MaxCompute)
Pour utiliser une valeur STRING en entrée, configurez l'édition des types de données sur V1.0. Le système convertit implicitement la chaîne en type DATETIME, puis en UTC avant la troncature.
-- Set the time zone to UTC+8.
SET odps.sql.timezone=Asia/Shanghai;
-- Set the data type edition to V1.0 to allow implicit STRING-to-DATETIME conversion.
SET odps.sql.type.system.odps2=false;
SELECT TRUNC_TIME('2025-06-03 15:30:30', 'hour');
-- Result (local time 15:30 UTC+8 converts to 07:00 UTC, then truncated to hour):
+---------------------+
| _c0 |
+---------------------+
| 2025-06-03 07:00:00 |
+---------------------+
Rubriques connexes
Pour découvrir d'autres fonctions de calcul et de conversion de dates, consultez la page Fonctions de date.