-
-Operator (Minuszeichen)
Gilt für: Databricks SQL 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-Ausdruckexpr2
: Der akzeptierte Typ hängt vom Typ vonexpr
ab:- Wenn
expr1
ein numerischer Wert ist, mussexpr2
ein numerischer Ausdruck sein. - Wenn
expr1
ein Jahres-/Monats- oder Tages-/Zeit-Intervall ist, mussexpr2
zu der entsprechenden Intervallklasse gehören. - Andernfalls muss
expr2
ein DATE oder TIMESTAMP sein.
- Wenn
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 undexpr2
ein Tages-/Zeit-Intervall ist, ist das Ergebnis ein TIMESTAMP. - Wenn
expr1
ein TIMESTAMP undexpr2
ein Intervall ist, ist das Ergebnis ein TIMESTAMP. - Wenn
expr1
undexpr2
DATE-Angaben sind, ist das Ergebnis einINTERVAL DAYS
. - Wenn
expr1
oderexpr2
TIMESTAMP-Angaben sind, ist das Ergebnis einINTERVAL DAY TO SECOND
. - Wenn
expr1
undexpr2
Jahres-/Monats-Intervalle sind, ist das Ergebnis ein Jahres-/Monats-Intervall mit ausreichend breiten Einheiten, um das Ergebnis darstellen zu können. - Wenn
expr1
undexpr2
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