- operador (signo menos)

Se aplica a:casilla marcada como Sí Databricks SQL casilla marcada como Sí 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 de expr:
    • 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.

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 y expr2 un intervalo de día y hora, el resultado es una marca de tiempo.
  • Si expr1 es una marca de tiempo y expr2 un intervalo, el resultado es una marca de tiempo.
  • Si expr1 y expr2 son fechas, el resultado es INTERVAL DAYS.
  • Si expr1 o expr2 son marcas de tiempo, el resultado es INTERVAL DAY TO SECOND.
  • Si expr1 y expr2 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 y expr2 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