-
operador (signo menos)
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
expr1
es un valor numérico,expr2
debe ser una expresión numérica. - Si
expr1
es un intervalo de mes y año o de día y hora,expr2
debe ser de la clase correspondiente de intervalo. - De lo contrario,
expr2
debe ser una fecha o marca de tiempo.
- Si
Devoluciones
El tipo de resultado se determina en el orden siguiente:
- Si
expr1
es un valor numérico, el resultado es el tipo máximo común de los argumentos. - Si
expr1
es una fecha yexpr2
un intervalo de día y hora, el resultado es una marca de tiempo. - Si
expr1
es una marca de tiempo yexpr2
un intervalo, el resultado es una marca de tiempo. - Si
expr1
yexpr2
son fechas, el resultado esINTERVAL DAYS
. - Si
expr1
oexpr2
son marcas de tiempo, el resultado esINTERVAL DAY TO SECOND
. - Si
expr1
yexpr2
son 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
expr1
yexpr2
son 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