-
Operator (minteken)
Van toepassing op: Databricks
Databricks Runtime
Retourneert de aftrekking van expr2
van expr1
.
Syntaxis
expr1 - expr2
Argumenten
expr1
: een numerieke expressie, DATUM, TIMESTAMP of INTERVAL.expr2
: Het geaccepteerde type is afhankelijk vanexpr
het type :- Als
expr1
een numeriekeexpr2
expressie is, moet een numerieke expressie zijn - Als
expr1
een jaar-maand- of dag-tijdinterval is,expr2
moet u van de overeenkomende intervalklasse zijn. - Anders
expr2
moet een DATUM of TIJDSTEMPEL zijn.
- Als
Retouren
Het resultaattype wordt bepaald in de volgende volgorde:
- Als
expr1
een numerieke waarde is, is het resultaat een algemeen maximumtype van de argumenten. - Als
expr1
een DATUM enexpr2
een dag-tijdinterval is, is het resultaat een TIMESTAMP. - Als
expr1
een TIMESTAMP is enexpr2
een interval is, is het resultaat een TIMESTAMP. - Als
expr1
enexpr2
DATE's zijn, is het resultaat eenINTERVAL DAYS
. - Als
expr1
ofexpr2
TIMESTAMP zijn, is het resultaat eenINTERVAL DAY TO SECOND
. - Als
expr1
enexpr2
jaar-maandintervallen zijn, is het resultaat een jaar-maandinterval van voldoende brede eenheden om het resultaat weer te geven. - Als
expr1
enexpr2
dag-tijdintervallen zijn, is het resultaat een dag-tijdinterval van voldoende brede eenheden om het resultaat weer te geven. - Anders komt het resultaattype overeen met
expr1
.
Als beide expressies interval zijn, moeten ze van dezelfde klasse zijn.
Wanneer u een jaar-maandinterval af trekt van een DATUM, zorgt Databricks SQL ervoor dat de resulterende datum goed is opgemaakt.
Als het resultaat het resultaattype overloopt, genereert Databricks SQL een ARITHMETIC_OVERFLOW fout.
Gebruik try_subtract om terug te keren NULL
bij overloop.
Waarschuwing
Als in Databricks Runtime spark.sql.ansi.enabled is false
, veroorzaakt een overloop geen fout, maar 'verpakt' het resultaat in plaats daarvan.
Voorbeelden
> 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