-
Operator (minteken)
Retourneert de aftrekking van expr2
expr1
.
Syntaxis
expr1 - expr2
Argumenten
expr1
: Een numerieke, DATUM-, TIMESTAMP- of INTERVAL-expressie.expr2
: Het geaccepteerde type is afhankelijk van het type :expr
- Als
expr1
een numerieke expressie moet een numeriekeexpr2
expressie zijn - Als
expr1
dit een jaarmaand- of daginterval is,expr2
moet dit de overeenkomende intervalklasse zijn. - Anders
expr2
moet een DATUM of TIJDSTEMPEL zijn.
- Als
Retouren
Het resultaattype wordt bepaald in de volgende volgorde:
- Als
expr1
dit een numerieke waarde is, is het resultaat een gemeenschappelijk maximumtype van de argumenten. - Als
expr1
dit een DATUM is enexpr2
een daginterval is, is het resultaat een TIJDSTEMPEL. - Als
expr1
een TIMESTAMP is enexpr2
een interval is, is het resultaat een TIMESTAMP. - Als
expr1
enexpr2
zijn DATE's het resultaat eenINTERVAL DAYS
. - Als
expr1
ofexpr2
tijdstempel is het resultaat eenINTERVAL DAY TO SECOND
. - Als
expr1
enexpr2
jaarmaandintervallen zijn, is het resultaat een jaarmaandinterval van voldoende brede eenheden om het resultaat weer te geven. - Als
expr1
enexpr2
dag-tijdintervallen zijn, is het resultaat een daginterval van voldoende brede eenheden om het resultaat weer te geven. - Anders komt het resultaattype overeen
expr1
.
Als beide expressies een interval zijn, moeten ze van dezelfde klasse zijn.
Wanneer u een jaarmaandinterval aftrekken van een DATUM, zorgt Databricks Runtime ervoor dat de resulterende datum goed is opgemaakt.
Als het resultaat het resultaattype overloopt, genereert Databricks Runtime een overloopfout.
Gebruik try_subtract om terug te keren NULL
op overloop.
Waarschuwing
Als spark.sql.ansi.enabled een overloop is false
, wordt er geen fout gegenereerd, maar wordt het resultaat 'verpakt'.
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