- Opérateur (signe moins)

S’applique à :case marquée oui Databricks SQL case marquée oui Databricks Runtime

Retourne la soustraction de expr2 à partir de expr1.

Syntaxe

expr1 - expr2

Arguments

  • expr1 : expression numérique, DATE, TIMESTAMP ou INTERVAL.
  • expr2 : le type accepté dépend du type de expr :
    • Si expr1 est une valeur numérique, expr2 doit être une expression numérique
    • Si expr1 est un intervalle année-mois ou jour-temps, expr2 doit être de la classe d’intervalle correspondante.
    • Dans le cas contraire, expr2 doit être une valeur DATE ou TIMESTAMP.

Retours

Le type de résultat est déterminé dans l’ordre suivant :

  • Si expr1 est un nombre, le résultat est le type maximal commun des arguments.
  • Si expr1 est de type DATE et que expr2 est un intervalle de jour-heure, le résultat est de type TIMESTAMP.
  • Si expr1 est de type TIMESTAMP et expr2 est un intervalle, le résultat est de type TIMESTAMP.
  • Si expr1 et expr2 sont de type DATE, le résultat est un INTERVAL DAYS.
  • Si expr1 ou expr2 sont de type TIMESTAMP, le résultat est un INTERVAL DAY TO SECOND.
  • Si expr1 et expr2 sont des intervalles d’année-mois, le résultat est un intervalle d’année-mois qui correspond à des unités suffisamment grandes pour représenter le résultat.
  • Si expr1 et expr2 sont des intervalles de jour-heure, le résultat est un intervalle de jour-heure qui correspond à des unités suffisamment grandes pour représenter le résultat.
  • Sinon, le type de résultat correspond à expr1.

Si les deux expressions sont des intervalles, elles doivent être de la même classe.

Lorsque vous soustrait un intervalle d’un mois d’une date, Azure Databricks garantit que la date résultante est bien formée.

Si le résultat dépasse le type de résultat, Azure Databricks déclenche une erreur ARITHMETIC_OVERFLOW ou INTERVAL_ARITHMETIC_OVERFLOW.

Utilisez try_subtract pour retourner NULL en cas de dépassement de capacité.

Avertissement

Dans Databricks Runtime, si spark.sql.ansi.enabled est false, un dépassement ne provoque pas d’erreur, mais « enveloppe » le résultat à la place.

Conditions d’erreur courantes

Exemples

> 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