- Operator (minteken)

Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime

Geeft als resultaat de aftrekking van expr2expr1.

Syntaxis

expr1 - expr2

Argumenten

  • expr1: Een numerieke, DATUM-, TIJD-, TIMESTAMP- of INTERVAL-expressie.
  • expr2: Het geaccepteerde type is afhankelijk van expr1het type :
    • Als expr1 dit een numerieke expr2 expressie is, moet dit een numerieke expressie zijn.
    • Als expr1 dit een jaar- of dagtijdinterval is, expr2 moet dit een overeenkomende intervalklasse zijn.
    • Als expr1 dit een TIJD is, expr2 moet dit een TIJD- of dagtijdinterval zijn.
    • Anders expr2 moet een DATUM- of TIJDSTEMPEL zijn.

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 en expr2 een dag-tijdsinterval is, is het resultaat een TIJDSTEMPEL.
  • Als expr1 dit een TIJD is en expr2 een daginterval is, is het resultaat een TIJD met de bredere precisie van de twee operanden. Als het resultaat buiten [00:00:00, 24:00:00) valt, verhoogt Azure Databricks DATETIME_OVERFLOW.
  • Als expr1 en expr2 timo's zijn, is het resultaat een DAY-TIME INTERVAL.
  • Als expr1 dit een TIJDSTEMPEL is en expr2 een interval is, is het resultaat een TIJDSTEMPEL.
  • Als expr1 en expr2 zijn DATE's het resultaat een INTERVAL DAYS.
  • Als expr1 of expr2 timestamp is het resultaat een INTERVAL DAY TO SECOND.
  • Als expr1 en expr2 jaarmaandintervallen zijn, is het resultaat een interval van een jaarmaand van voldoende brede eenheden om het resultaat weer te geven.
  • Als expr1 en expr2 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 Azure Databricks ervoor dat de resulterende datum goed is opgemaakt.

Als het resultaat het resultaattype overloopt, wordt Azure Databricks de fout ARITHMETIC_OVERFLOW of INTERVAL_ARITHMETIC_OVERFLOW gegenereerd.

Gebruik try_subtract om terug te keren NULL naar overloop.

Waarschuwing

Als in Databricks Runtime spark.sql.ansi.enabledveroorzaakt een overloop geen fout, maar 'verpakt' het resultaat.

Algemene foutvoorwaarden

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 TIME'12:30:00' - INTERVAL '2' HOUR
 10:30:00

> SELECT TIME'14:30:00' - TIME'10:15:00'
 INTERVAL '04:15:00' HOUR TO SECOND

>  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