Todos los productos
Search
Centro de documentos

MaxCompute:INTERVAL data type

Última actualización: Sep 05, 2026

Cuando resta dos valores de fecha o de timestamp en MaxCompute, el resultado es un INTERVAL: una representación tipada del intervalo de tiempo transcurrido entre ambos. MaxCompute proporciona dos subtipos de INTERVAL: INTERVAL_YEAR_MONTH para intervalos de calendario en años y meses, e INTERVAL_DAY_TIME para intervalos de duración fija en días, horas, minutos y segundos. Estos subtipos se basan en escalas de tiempo diferentes y no pueden combinarse en operaciones aritméticas.

Requisitos previos

Antes de empezar, asegúrese de:

  • Habilitar el sistema de tipos de MaxCompute 2.0. Para ello, ejecute en su sesión la instrucción que se muestra a continuación:

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

INTERVAL_YEAR_MONTH

INTERVAL_YEAR_MONTH almacena un intervalo en años y meses.

Sintaxis

Use el patrón de cadena que se muestra en la columna String pattern. Anteponga - al valor del patrón para expresar un intervalo negativo.

Syntax

String pattern

Description

Example

INTERVAL '<value>' YEAR TO MONTH

y-m

Componentes de año y mes

INTERVAL '120-3' YEAR TO MONTH (120 años, 3 meses)

INTERVAL '<value>' YEAR

y

Solo componente de año

INTERVAL '9' YEAR (9 años)

INTERVAL '<value>' MONTH

m

Solo componente de mes

INTERVAL '40' MONTH (40 meses = 3 años y 4 meses)

Rangos válidos y comportamiento ante desbordamientos

Field

Valid range

When used alone

When combined with another field

año

0–9,999

Debe permanecer dentro del rango

Debe permanecer dentro del rango

mes

0–11

Puede exceder 11; el excedente se convierte en años

No puede exceder 11; excederlo causa un error de análisis sintáctico

Ejemplo de desbordamiento con solo MONTH

Cuando especifique solo el intervalo MONTH, el valor puede exceder 11. MaxCompute convierte los meses excedentes en años automáticamente:

SELECT INTERVAL '200' MONTH;

Resultado:

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

200 meses = 16 años y 8 meses.

YEAR TO MONTH: mes fuera de rango (error)

Al usar YEAR TO MONTH, el valor de mes debe estar entre 0 y 11:

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

Resultado:

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

INTERVAL_DAY_TIME

INTERVAL_DAY_TIME almacena un intervalo en días, horas, minutos, segundos y fracciones de segundo.

Sintaxis

Use el patrón de cadena que se muestra en la columna String pattern. Anteponga - al valor del patrón para expresar un intervalo negativo.

Syntax

String pattern

Description

Example

INTERVAL '<value>' DAY

d

Solo componente de día

INTERVAL '1' DAY

INTERVAL '<value>' HOUR

h

Únicamente componente de hora

INTERVAL '1' HOUR

INTERVAL '<value>' MINUTE

m

Componente de minuto solamente

INTERVAL '1' MINUTE

INTERVAL '<value>' SECOND

s[.nnnnnnnnn]

Solo componente de segundo (compatible con las fracciones de segundo)

INTERVAL '1.1' SECOND

INTERVAL '<value>' DAY TO HOUR

d h

Componentes de día y hora

INTERVAL '1 23' DAY TO HOUR (1 día, 23 horas)

INTERVAL '<value>' DAY TO MINUTE

d h:m

Día, hora y minuto

INTERVAL '1 23:59' DAY TO MINUTE

INTERVAL '<value>' DAY TO SECOND

d h:m:s

Día, hora, minuto y segundo

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

INTERVAL '<value>' HOUR TO MINUTE

h:m

Componentes de hora y minuto

INTERVAL '23:59' HOUR TO MINUTE

INTERVAL '<value>' HOUR TO SECOND

h:m:s

Hora, minuto y segundo

INTERVAL '23:59:59.999' HOUR TO SECOND

INTERVAL '<value>' MINUTE TO SECOND

m:s

Minuto y segundo

INTERVAL '59:59.999' MINUTE TO SECOND

Rangos válidos y comportamiento ante desbordamientos

Field

Valid range

When used alone

When combined with another field

día

0–2,147,483,647

Debe permanecer dentro del rango

Debe permanecer dentro del rango

hora

0–23

Puede exceder 23; el excedente se convierte en días

No puede exceder 23

minuto

0–59

Puede exceder 59; el excedente se convierte en horas

No puede exceder 59

segundo

0–59.999999999

Puede exceder 59; el excedente se convierte en minutos

No puede exceder 59.999999999

Ejemplo de desbordamiento de una sola unidad

Cuando especifique una sola unidad de tiempo, el valor puede exceder su límite superior. MaxCompute convierte el excedente a la siguiente unidad más grande automáticamente:

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

Valor de varias unidades fuera de rango (error)

Al usar un formato de varias unidades, cada campo debe permanecer dentro de su rango válido:

SELECT INTERVAL '23:60' HOUR TO MINUTE;

Resultado:

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

Operaciones compatibles

Sumar o restar valores INTERVAL del mismo tipo

La suma y la resta funcionan entre valores INTERVAL del mismo tipo. Las operaciones entre INTERVAL_YEAR_MONTH e INTERVAL_DAY_TIME no son compatibles; ambos tipos usan escalas de tiempo diferentes (meses de calendario frente a segundos de duración fija).

Sumar dos valores INTERVAL_DAY_TIME:

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

Resultado:

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

Restar dos valores INTERVAL_DAY_TIME:

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

Resultado:

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

Restar dos valores INTERVAL_YEAR_MONTH:

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

Resultado:

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

Operación aritmética entre tipos (error):

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

Resultado:

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

Restar valores DATE, TIMESTAMP o TIMESTAMP_NTZ para obtener un INTERVAL_DAY_TIME

Restar dos valores DATE, TIMESTAMP o TIMESTAMP_NTZ devuelve un resultado INTERVAL_DAY_TIME. La resta de dos valores DATETIME no es compatible.

Restar dos valores DATE:

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

Resultado:

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

Restar dos valores TIMESTAMP:

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

Resultado:

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

Resta de DATETIME (error):

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

Resultado:

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

Sumar o restar un INTERVAL a un valor DATE, TIMESTAMP o TIMESTAMP_NTZ

Sumar o restar un INTERVAL a un valor DATE, TIMESTAMP o TIMESTAMP_NTZ devuelve un valor del mismo tipo. Esta operación no es compatible con los valores DATETIME.

Restar un INTERVAL_YEAR_MONTH de un DATE:

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

Resultado:

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

Restar un INTERVAL_DAY_TIME de un TIMESTAMP_NTZ:

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

Resultado:

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

DATETIME con INTERVAL (error):

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

Resultado:

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