- Operatore (segno meno)

Si applica a:check contrassegnato con sì controllo SQL di Databricks contrassegnato con 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 valore numerico expr2 deve essere un'espressione numerica
    • Se expr1 è un intervallo di anno o di giorno, expr2 deve essere della classe di intervallo corrispondente.
    • In caso contrario expr2 , deve essere un valore DATE o TIMESTAMP.

Restituisce

Il tipo di risultato viene determinato nell'ordine seguente:

  • Se expr1 è un valore numerico, il risultato è il tipo massimo comune degli argomenti.
  • Se expr1 è un valore DATE ed expr2 è un intervallo di tempo di giorno, il risultato è timestamp.
  • Se expr1 è un timestamp ed expr2 è un intervallo, il risultato è 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 di 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 giornaliero di unità sufficientemente estese per rappresentare il risultato.
  • In caso contrario, il tipo di risultato corrisponde a expr1.

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

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

Se il risultato supera il 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 causa 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