Freigeben über


--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 Jahresmonatsintervall von einem DATUM subtrahieren, stellt Azure Databricks sicher, dass das resultierende Datum wohlgeformt ist.

Wenn das Ergebnis den Ergebnistyp überläuft, löst Azure Databricks einen Fehler ARITHMETIC_OVERFLOW oder INTERVAL_ARITHMETIC_OVERFLOW 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.

Häufige Fehlerbedingungen

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