- (signe moins) (opérateur)

Retourne la soustraction de expr2 à partir de expr1 .

Syntaxe

expr1 - expr2

Arguments

  • expr1: Une expression numérique, de DATE, d’horodatage ou d’intervalle.
  • 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 il doit s’agir d’une date ou d’un horodateur.

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 une date et qu' expr2 il s’agit d’un intervalle de jour-heure, le résultat est un horodateur.
  • Si expr1 est un horodateur et expr2 s’il s’agit d’un intervalle, le résultat est un horodateur.
  • Si expr1 et expr2 sont des DATEs, le résultat est un INTERVAL DAYS .
  • Si expr1 ou expr2 sont timestamp, le résultat est un INTERVAL DAY TO SECOND .
  • Si expr1 et expr2 sont des intervalles de mois de l’année, le résultat est un intervalle d’un mois de l’année qui correspond à des unités suffisamment larges pour représenter le résultat.
  • Si expr1 et expr2 sont des intervalles de jour-heure, le résultat est un intervalle de jour de temps d’unités suffisamment larges pour représenter le résultat.
  • Sinon, le type de résultat correspond à expr1 .

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

Lorsque vous soustrayez un intervalle d’un mois d’une année à partir d’une DATE Databricks Runtime garantit que la date résultante est bien formée.

Si le résultat dépasse le type de résultat Databricks Runtime génère une erreur de dépassement de capacité.

Avertissement

Si Spark. Sql. ANSI. Enabled est un dépassement de capacité, aucune erreur n’est générée, mais le résultat est renvoyé à la ligne.

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_tiemstamp - (current_date + INTERVAL '1' DAY));
 interval day to second

> SELECT DATE'2021-03-31' - INTERVAL '1' MONTH;
 2021-02-28