- operator (minteken)

Van toepassing op:gemarkeerd met ja Databricks SQL-controle gemarkeerd als ja Databricks Runtime

Retourneert de aftrekking van expr2 van expr1.

Syntaxis

expr1 - expr2

Argumenten

  • expr1: Een numerieke, DATUM-, TIMESTAMP- of INTERVAL-expressie.
  • expr2: Het geaccepteerde type is afhankelijk van exprhet type :
    • Als expr1 is een numerieke expr2 expressie moet een numerieke expressie zijn
    • Als expr1 een jaar-maand- of daginterval is, expr2 moet de overeenkomende intervalklasse zijn.
    • Anders expr2 moet een DATUM of TIJDSTEMPEL zijn.

Retourneert

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 en expr2 een dag-tijdinterval is, is het resultaat een TIMESTAMP.
  • Als expr1 een TIMESTAMP is en expr2 een interval is, is het resultaat een TIMESTAMP.
  • Als expr1 en expr2 DATEs zijn, is het resultaat een INTERVAL DAYS.
  • Als expr1 of expr2 TIMESTAMP zijn, is het resultaat een INTERVAL DAY TO SECOND.
  • Als expr1 en expr2 jaar-maandintervallen zijn, is het resultaat een jaar-maandinterval van voldoende brede eenheden om het resultaat weer te geven.
  • Als expr1 en expr2 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.

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