Tous les produits
Search
Centre de documentation

MaxCompute:INTERVAL data type

Dernière mise à jour :Aug 10, 2026

La soustraction de deux valeurs de date ou d'horodatage dans MaxCompute renvoie un résultat de type INTERVAL, une représentation typée de l'intervalle de temps qui les sépare. MaxCompute propose deux sous-types d'INTERVAL : INTERVAL_YEAR_MONTH pour les intervalles calendaires (années et mois) et INTERVAL_DAY_TIME pour les intervalles de durée fixe (jours, heures, minutes et secondes). Ces deux sous-types reposent sur des échelles de temps différentes et ne peuvent pas être combinés dans des opérations arithmétiques.

Prérequis

Avant de commencer, assurez-vous d'avoir :

  • Activé le système de types MaxCompute 2.0 en exécutant l'instruction suivante dans votre session :

    SET odps.sql.type.system.odps2=true;

INTERVAL_YEAR_MONTH

Le type INTERVAL_YEAR_MONTH stocke un intervalle exprimé en années et mois.

Syntaxe

Utilisez le modèle de chaîne indiqué dans la colonne String pattern. Précédez la valeur du modèle par - pour exprimer un intervalle négatif.

Syntaxe

Modèle de chaîne

Description

Exemple

INTERVAL '<value>' YEAR TO MONTH

y-m

Composantes année et mois

INTERVAL '120-3' YEAR TO MONTH (120 ans, 3 mois)

INTERVAL '<value>' YEAR

y

Composante année uniquement

INTERVAL '9' YEAR (9 ans)

INTERVAL '<value>' MONTH

m

Composante mois uniquement

INTERVAL '40' MONTH (40 mois = 3 ans et 4 mois)

Plages valides et comportement en cas de dépassement

Champ

Plage valide

Lorsqu'il est utilisé seul

Lorsqu'il est combiné à un autre champ

année

0–9 999

Doit rester dans la plage

Doit rester dans la plage

mois

0–11

Peut dépasser 11 — le dépassement est converti en années

Ne peut pas dépasser 11 — un dépassement provoque une erreur d'analyse

Exemple de dépassement pour les mois uniquement

Si vous spécifiez uniquement l'intervalle MONTH, la valeur peut dépasser 11. MaxCompute convertit automatiquement les mois excédentaires en années :

SELECT INTERVAL '200' MONTH;

Résultat :

+------+
| _c0  |
+------+
| 16-8 |
+------+

200 mois équivalent à 16 ans et 8 mois.

YEAR TO MONTH — mois hors plage (erreur)

Avec YEAR TO MONTH, la valeur du mois doit être comprise entre 0 et 11 :

SELECT INTERVAL '-2021-12' YEAR TO MONTH;

Résultat :

FAILED: ODPS-0130161:[1,17] Parse exception - cannot parse -2021-12 as a valid INTERVAL_DAY_TIME

INTERVAL_DAY_TIME

Le type INTERVAL_DAY_TIME stocke un intervalle exprimé en jours, heures, minutes, secondes et fractions de seconde.

Syntaxe

Utilisez le modèle de chaîne indiqué dans la colonne String pattern. Précédez la valeur du modèle par - pour exprimer un intervalle négatif.

Syntaxe

Modèle de chaîne

Description

Exemple

INTERVAL '<value>' DAY

d

Composante jour uniquement

INTERVAL '1' DAY

INTERVAL '<value>' HOUR

h

Composante heure uniquement

INTERVAL '1' HOUR

INTERVAL '<value>' MINUTE

m

Composante minute uniquement

INTERVAL '1' MINUTE

INTERVAL '<value>' SECOND

s[.nnnnnnnnn]

Composante seconde uniquement (prend en charge les fractions de seconde)

INTERVAL '1.1' SECOND

INTERVAL '<value>' DAY TO HOUR

d h

Composantes jour et heure

INTERVAL '1 23' DAY TO HOUR (1 jour, 23 heures)

INTERVAL '<value>' DAY TO MINUTE

d h:m

Composantes jour, heure et minute

INTERVAL '1 23:59' DAY TO MINUTE

INTERVAL '<value>' DAY TO SECOND

d h:m:s

Composantes jour, heure, minute et seconde

INTERVAL '1 23:59:59.999' DAY TO SECOND

INTERVAL '<value>' HOUR TO MINUTE

h:m

Composantes heure et minute

INTERVAL '23:59' HOUR TO MINUTE

INTERVAL '<value>' HOUR TO SECOND

h:m:s

Composantes heure, minute et seconde

INTERVAL '23:59:59.999' HOUR TO SECOND

INTERVAL '<value>' MINUTE TO SECOND

m:s

Composantes minute et seconde

INTERVAL '59:59.999' MINUTE TO SECOND

Plages valides et comportement en cas de dépassement

Champ

Plage valide

Lorsqu'il est utilisé seul

Lorsqu'il est combiné à un autre champ

jour

0–2 147 483 647

Doit rester dans la plage

Doit rester dans la plage

heure

0–23

Peut dépasser 23 — le dépassement est converti en jours

Ne peut pas dépasser 23

minute

0–59

Peut dépasser 59 — le dépassement est converti en heures

Ne peut pas dépasser 59

seconde

0–59,999999999

Peut dépasser 59 — le dépassement est converti en minutes

Ne peut pas dépasser 59,999999999

Exemple de dépassement pour une unité unique

Si vous spécifiez une seule unité de temps, la valeur peut dépasser sa limite supérieure. MaxCompute convertit automatiquement l'excédent vers l'unité supérieure :

SELECT INTERVAL '24' HOUR;     -- Equivalent to INTERVAL '1' DAY
SELECT INTERVAL '60' MINUTE;   -- Equivalent to INTERVAL '1' HOUR
SELECT INTERVAL '6000' SECOND; -- Equivalent to INTERVAL '1:40' HOUR TO MINUTE

Valeur multi-unités hors plage (erreur)

Avec un format multi-unités, chaque champ doit rester dans sa plage valide :

SELECT INTERVAL '23:60' HOUR TO MINUTE;

Résultat :

FAILED: ODPS-0130161:[1,17] Parse exception - cannot parse 23:60 as a valid INTERVAL_DAY_TIME

Opérations prises en charge

Addition ou soustraction de valeurs INTERVAL du même type

L'addition et la soustraction fonctionnent entre des valeurs INTERVAL du même type. Les opérations entre INTERVAL_YEAR_MONTH et INTERVAL_DAY_TIME ne sont pas prises en charge, car ces deux types utilisent des échelles de temps différentes (mois calendaires contre secondes de durée fixe).

Addition de deux valeurs INTERVAL_DAY_TIME :

SELECT INTERVAL '24' HOUR + INTERVAL '23' HOUR;

Résultat :

+----------------------+
| _c0                  |
+----------------------+
| 1 23:00:00.000000000 |
+----------------------+

Soustraction de deux valeurs INTERVAL_DAY_TIME :

SELECT INTERVAL '24' HOUR + INTERVAL '-23' HOUR;

Résultat :

+----------------------+
| _c0                  |
+----------------------+
| 0 01:00:00.000000000 |
+----------------------+

Soustraction de deux valeurs INTERVAL_YEAR_MONTH :

SELECT INTERVAL '5-1' YEAR TO MONTH - INTERVAL '9-2' YEAR TO MONTH;

Résultat :

+------+
| _c0  |
+------+
| -4-1 |
+------+

Arithmétique entre types différents (erreur) :

SELECT INTERVAL '2000-1' YEAR TO MONTH + INTERVAL '1 23:59:59.999' DAY TO SECOND;

Résultat :

FAILED: ODPS-0130071:[1,8] Semantic analysis exception - invalid operand type(s) INTERVAL_YEAR_MONTH,INTERVAL_DAY_TIME for operator '+'

Soustraction de valeurs DATE, TIMESTAMP ou TIMESTAMP_NTZ pour obtenir un INTERVAL_DAY_TIME

La soustraction de deux valeurs DATE, TIMESTAMP ou TIMESTAMP_NTZ renvoie un résultat de type INTERVAL_DAY_TIME. La soustraction de deux valeurs DATETIME n'est pas prise en charge.

Soustraction de deux valeurs DATE :

SELECT DATE '2021-10-29' - DATE '2024-11-29';

Résultat :

+--------------------------+
| _c0                      |
+--------------------------+
| -1127 00:00:00.000000000 |
+--------------------------+

Soustraction de deux valeurs TIMESTAMP :

SELECT TIMESTAMP '2024-11-29 00:01:10' - TIMESTAMP'2021-10-29 00:01:00';

Résultat :

+-------------------------+
| _c0                     |
+-------------------------+
| 1127 00:00:10.000000000 |
+-------------------------+

Soustraction de DATETIME (erreur) :

SELECT DATETIME '2024-11-11 00:00:00' - DATETIME'2021-11-11 00:00:00';

Résultat :

FAILED: ODPS-0130071:[1,8] Semantic analysis exception - invalid operand type(s) DATETIME,DATETIME for operator '-'

Addition ou soustraction d'un INTERVAL à une valeur DATE, TIMESTAMP ou TIMESTAMP_NTZ

L'ajout ou la soustraction d'un INTERVAL à une valeur DATE, TIMESTAMP ou TIMESTAMP_NTZ renvoie une valeur du même type. Cette opération n'est pas prise en charge pour les valeurs DATETIME.

Soustraction d'un INTERVAL_YEAR_MONTH à une DATE :

SELECT DATE '2021-11-11' - INTERVAL '-1' MONTH;

Résultat :

+------------+
| _c0        |
+------------+
| 2021-12-11 |
+------------+

Soustraction d'un INTERVAL_DAY_TIME à une TIMESTAMP_NTZ :

SELECT TIMESTAMP_NTZ'2024-11-29 00:01:10' - INTERVAL '1 23' DAY TO HOUR;

Résultat :

+---------------------+
| _c0                 |
+---------------------+
| 2024-11-27 01:01:10 |
+---------------------+

DATETIME avec INTERVAL (erreur) :

SELECT DATETIME '2024-11-11 00:00:00' - INTERVAL '1 23' DAY TO HOUR;

Résultat :

FAILED: ODPS-0130071:[1,8] Semantic analysis exception - invalid operand type(s) DATETIME,INTERVAL_DAY_TIME for operator '-'