Dela via


- Operator (minustecken)

Gäller för: markerad ja Databricks SQL markerad ja Databricks Runtime

Returnerar subtraktionen för expr2 från expr1.

Syntax

expr1 - expr2

Argument

  • expr1: Ett numeriskt uttryck, DATUM, TIDSSTÄMPEL eller INTERVALL-uttryck.
  • expr2: Den godkända typen beror på typen av expr:
    • Om expr1 är ett numeriskt expr2 måste vara numeriskt uttryck
    • Om expr1 är ett års- eller dagtidsintervall expr2 måste vara av den matchande intervallklassen.
    • Annars expr2 måste vara en DATE eller TIMESTAMP.

Returer

Resultattypen bestäms i följande ordning:

  • Om expr1 är ett numeriskt värde är resultatet den vanligaste maximala typen av argument.
  • Om expr1 är ett DATUM och expr2 är ett dagtidsintervall är resultatet en TIMESTAMP.
  • Om expr1 är en TIMESTAMP och expr2 är ett intervall är resultatet en TIMESTAMP.
  • Om expr1 och expr2 är DATEs blir resultatet en INTERVAL DAYS.
  • Om expr1 eller expr2 är TIMESTAMP är resultatet en INTERVAL DAY TO SECOND.
  • Om expr1 och expr2 är årsmånadsintervall är resultatet ett årsmånadsintervall med tillräckligt breda enheter för att representera resultatet.
  • Om expr1 och expr2 är dagtidsintervall är resultatet ett dagsintervall på tillräckligt breda enheter för att representera resultatet.
  • Annars matchar expr1resultattypen .

Om båda uttrycken är intervall måste de ha samma klass.

När du subtraherar ett årsmånadsintervall från ett DATUM ser Databricks SQL till att det resulterande datumet är välformat.

Om resultatet flödar över resultattypen genererar Databricks SQL ett ARITHMETIC_OVERFLOW fel.

Använd try_subtract för att återgå NULL till spill.

Varning

I Databricks Runtime, om spark.sql.ansi.enabled är false, orsakar ett spill inte ett fel utan "omsluter" resultatet i stället.

Exempel

> 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