-
Operator (minteken)
Van toepassing op: Databricks SQL Databricks Runtime
Geeft als resultaat de aftrekking van expr2
expr1
.
Syntaxis
expr1 - expr2
Argumenten
expr1
: Een numerieke, DATUM-, TIMESTAMP- of INTERVAL-expressie.expr2
: Het geaccepteerde type is afhankelijk vanexpr
het type :- Als
expr1
een numeriekeexpr2
expressie moet zijn - Als
expr1
dit een jaar- of dagtijdinterval is,expr2
moet dit een overeenkomende intervalklasse zijn. - Anders
expr2
moet een DATUM- of TIJDSTEMPEL zijn.
- Als
Retouren
Het resultaattype wordt bepaald in de volgende volgorde:
- Als
expr1
het een numerieke waarde is, is het resultaat een gemeenschappelijk maximumtype van de argumenten. - Als
expr1
het een DATUM is enexpr2
een dag-tijdsinterval is, is het resultaat een TIJDSTEMPEL. - Als
expr1
dit een TIJDSTEMPEL is enexpr2
een interval is, is het resultaat een TIJDSTEMPEL. - Als
expr1
enexpr2
zijn DATE's het resultaat eenINTERVAL DAYS
. - Als
expr1
ofexpr2
timestamp is het resultaat eenINTERVAL DAY TO SECOND
. - Als
expr1
enexpr2
jaarmaandintervallen zijn, is het resultaat een interval van een jaarmaand van voldoende brede eenheden om het resultaat weer te geven. - Als
expr1
enexpr2
dag-tijdintervallen zijn, is het resultaat een dag-tijdsinterval van voldoende brede eenheden om het resultaat weer te geven. - Anders komt het resultaattype overeen
expr1
.
Als beide expressies interval zijn, moeten ze van dezelfde klasse zijn.
Wanneer u een interval van een jaarmaand aftrekken 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
naar overloop.
Waarschuwing
Als in Databricks Runtime spark.sql.ansi.enabled isfalse
, veroorzaakt een overloop geen fout, maar 'verpakt' het resultaat.
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