Condividi tramite


- Operatore (segno meno)

Si applica a: segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime

Restituisce la sottrazione di expr2 da expr1.

Sintassi

expr1 - expr2

Argomenti

  • expr1: espressione numerica, DATE, TIMESTAMP o INTERVAL.
  • expr2: il tipo accettato dipende dal tipo di expr:
    • Se expr1 è un'espressione numerica expr2 deve essere un'espressione numerica
    • Se expr1 è un intervallo di tempo di un mese o di un giorno, expr2 deve essere della classe corrispondente di intervallo.
    • In caso contrario expr2 , deve essere un valore DATE o TIMESTAMP.

Valori restituiti

Il tipo di risultato viene determinato nell'ordine seguente:

  • Se expr1 è un valore numerico, il risultato è un tipo massimo comune degli argomenti.
  • Se expr1 è una data e expr2 è un intervallo di tempo di giorno, il risultato è timeSTAMP.
  • Se expr1 è un TIMESTAMP ed expr2 è un intervallo, il risultato è un TIMESTAMP.
  • Se expr1 e expr2 sono DATEs, il risultato è .INTERVAL DAYS
  • Se expr1 o expr2 sono TIMESTAMP, il risultato è un oggetto INTERVAL DAY TO SECOND.
  • Se expr1 e expr2 sono intervalli anno-mese, il risultato è un intervallo di mesi di anno di unità sufficientemente ampie per rappresentare il risultato.
  • Se expr1 e expr2 sono intervalli di tempo di giorno, il risultato è un intervallo di tempo di giorno di unità sufficientemente ampie per rappresentare il risultato.
  • In caso contrario, il tipo di risultato corrisponde a expr1.

Se entrambe le espressioni sono intervallo, devono essere della stessa classe.

Quando si sottrae un intervallo di mese di anno da una data, Databricks SQL garantisce che la data risultante sia ben formata.

Se il risultato esegue l'overflow del tipo di risultato, Databricks SQL genera un errore ARITHMETIC_OVERFLOW .

Usare try_subtract per restituire NULL l'overflow.

Avviso

In Databricks Runtime, se spark.sql.ansi.enabled è false, un overflow non genera un errore ma "esegue il wrapping" del risultato.

Esempi

> 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