Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:
Databricks SQL
Databricks Runtime
Devuelve la resta de expr2 de expr1.
Sintaxis
expr1 - expr2
Argumentos
-
expr1: una expresión numérica, DATE, TIMESTAMP o INTERVAL. -
expr2: el tipo aceptado depende del tipo deexpr:- Si
expr1es un valor numérico,expr2debe ser una expresión numérica. - Si
expr1es un intervalo de mes y año o de día y hora,expr2debe ser de la clase correspondiente de intervalo. - De lo contrario,
expr2debe ser una fecha o marca de tiempo.
- Si
Devoluciones
El tipo de resultado se determina en el orden siguiente:
- Si
expr1es un valor numérico, el resultado es el tipo máximo común de los argumentos. - Si
expr1es una fecha yexpr2un intervalo de día y hora, el resultado es una marca de tiempo. - Si
expr1es una marca de tiempo yexpr2un intervalo, el resultado es una marca de tiempo. - Si
expr1yexpr2son fechas, el resultado esINTERVAL DAYS. - Si
expr1oexpr2son marcas de tiempo, el resultado esINTERVAL DAY TO SECOND. - Si
expr1yexpr2son intervalos de mes y año, el resultado es un intervalo de mes y año con unidades lo suficientemente amplias para que representen el resultado. - Si
expr1yexpr2son intervalos de día y hora, el resultado es un intervalo de día y hora con unidades suficientes para representar el resultado. - En cualquier otro caso, el tipo del resultado coincide con el de
expr1.
Si ambas expresiones son intervalos, deben ser de la misma clase.
Al restar un intervalo de mes y año de una fecha, Databricks SQL garantiza que la fecha resultante tenga el formato correcto.
Si el resultado desborda el tipo de resultado, Databricks SQL produce un error ARITHMETIC_OVERFLOW.
Use try_subtract para regresar NULL al desbordamiento.
Advertencia
En Databricks Runtime, si spark.sql.ansi.enabled es false, un desbordamiento no provoca un error, sino que "ajusta" el resultado.
Ejemplos
> SELECT 2 - 1;
1
> SELECT DATE'2021-03-20' - INTERVAL '2' MONTH
2021-1-20
> SELECT TIMESTAMP'2021-03-20 12:15:29' - INTERVAL '3' SECOND
2021-03-20 12:15:26
> SELECT typeof(INTERVAL '3' DAY - INTERVAL '2' HOUR);
interval day to hour
> SELECT typeof(current_date - (current_date + INTERVAL '1' DAY));
interval day
> SELECT typeof(current_timestamp - (current_date + INTERVAL '1' DAY));
interval day to second
> SELECT DATE'2021-03-31' - INTERVAL '1' MONTH;
2021-02-28
> SELECT -100Y - 100Y;
Error: ARITHMETIC_OVERFLOW