- 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, HEURE, TIMESTAMP ou INTERVAL.
  • expr2 : le type accepté dépend du type de expr1 :
    • S’il expr1 s’agit d’une expression numérique, il doit s’agir d’une expr2 expression numérique.
    • Si expr1 est un intervalle année-mois ou jour-temps, expr2 doit être de la classe d’intervalle correspondante.
    • S’il expr1 s’agit d’une heure, expr2 il doit s’agir d’un intervalle DE TEMPS ou d’un intervalle de jour.
    • 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.
  • S’il expr1 s’agit d’un intervalle de temps expr2 de jour, le résultat est time avec une précision plus large des deux opérandes. Si le résultat tombe en dehors de [00:00:00, 24:00:00), Azure Databricks déclenche DATETIME_OVERFLOW.
  • Si expr1 et expr2 sont des TIMEs, le résultat est un DAY-TIME INTERVAL.
  • 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 TIME'12:30:00' - INTERVAL '2' HOUR
 10:30:00

> SELECT TIME'14:30:00' - TIME'10:15:00'
 INTERVAL '04:15:00' HOUR TO SECOND

>  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