--Operator (Minuszeichen)

Gilt für:durch Häkchen mit „Ja“ markiert Databricks SQL durch Häkchen mit „Ja“ markiert Databricks Runtime

Gibt das Ergebnis der Subtraktion von expr2 von expr1 zurück.

Syntax

expr1 - expr2

Argumente

  • expr1: ein numerischer Ausdruck oder ein DATE-, TIMESTAMP- oder INTERVAL-Ausdruck
  • expr2: Der akzeptierte Typ hängt vom Typ von expr ab:
    • Wenn expr1 ein numerischer Wert ist, muss expr2 ein numerischer Ausdruck sein.
    • Wenn expr1 ein Jahres-/Monats- oder Tages-/Zeit-Intervall ist, muss expr2 zu der entsprechenden Intervallklasse gehören.
    • Andernfalls muss expr2 ein DATE oder TIMESTAMP sein.

Gibt zurück

Der Ergebnistyp wird in der folgenden Reihenfolge bestimmt:

  • Wenn expr1 ein numerischer Wert ist, ist das Ergebnis der allgemeine maximale Typ der Argumente.
  • Wenn expr1 ein DATE und expr2 ein Tages-/Zeit-Intervall ist, ist das Ergebnis ein TIMESTAMP.
  • Wenn expr1 ein TIMESTAMP und expr2 ein Intervall ist, ist das Ergebnis ein TIMESTAMP.
  • Wenn expr1 und expr2 DATE-Angaben sind, ist das Ergebnis ein INTERVAL DAYS.
  • Wenn expr1 oder expr2 TIMESTAMP-Angaben sind, ist das Ergebnis ein INTERVAL DAY TO SECOND.
  • Wenn expr1 und expr2 Jahres-/Monats-Intervalle sind, ist das Ergebnis ein Jahres-/Monats-Intervall mit ausreichend breiten Einheiten, um das Ergebnis darstellen zu können.
  • Wenn expr1 und expr2 Tages-/Zeit-Intervalle sind, ist das Ergebnis ein Tages-/Zeit-Intervall mit ausreichend breiten Einheiten, um das Ergebnis darstellen zu können.
  • Andernfalls entspricht der Ergebnistyp expr1.

Wenn beide Ausdrücke ein Intervall sind, müssen sie derselben Klasse angehören.

Wenn Sie ein Jahres-/Monats-Intervall von einem DATE-Wert subtrahieren, stellt Databricks SQL sicher, dass das sich ergebende Datum wohlgeformt ist.

Wenn das Ergebnis einen Überlauf des Ergebnistyps verursacht, löst Databricks SQL einen ARITHMETIC_OVERFLOW-Fehler aus.

Verwenden Sie try_subtract, um den Überlauf zurückzugeben NULL.

Warnung

In Databricks Runtime verursacht ein Überlauf keinen Fehler, sondern „umschließt“ das Ergebnis, wenn spark.sql.ansi.enabled auf false festgelegt ist.

Beispiele

> 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