- Operator (minteken)

Retourneert de aftrekking van expr2expr1.

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 numerieke expr2 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.

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 en expr2 een daginterval is, is het resultaat een TIJDSTEMPEL.
  • Als expr1 een TIMESTAMP is en expr2 een interval is, is het resultaat een TIMESTAMP.
  • Als expr1 en expr2 zijn DATE's het resultaat een INTERVAL DAYS.
  • Als expr1 of expr2 tijdstempel is het resultaat een INTERVAL DAY TO SECOND.
  • Als expr1 en expr2 jaarmaandintervallen zijn, is het resultaat een jaarmaandinterval van voldoende brede eenheden om het resultaat weer te geven.
  • Als expr1 en expr2 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