- (znak minus) — operator

Dotyczy:zaznacz pole wyboru oznaczone jako yes Databricks SQL check oznaczone tak Databricks Runtime

Zwraca odejmowanie wartości expr2 z expr1.

Składni

expr1 - expr2

Argumenty

  • expr1: wyrażenie liczbowe, DATE, TIMESTAMP lub INTERVAL.
  • expr2: Akceptowany typ zależy od typu expr:
    • Jeśli expr1 jest wyrażeniem liczbowym expr2 , musi być wyrażeniem liczbowym
    • Jeśli expr1 jest to interwał miesiąca lub dnia, expr2 musi być zgodną klasą interwału.
    • W przeciwnym razie expr2 musi być sygnaturą DATE lub TIMESTAMP.

Zwraca

Typ wyniku jest określany w następującej kolejności:

  • Jeśli expr1 jest wartością liczbową, wynik jest typowym maksymalnym typem argumentów.
  • Jeśli expr1 jest to DATA i expr2 jest interwałem dnia, wynik jest sygnaturą CZASOWĄ.
  • Jeśli expr1 jest sygnaturą CZASOWĄ i expr2 jest interwałem, wynik jest sygnaturą CZASOWĄ.
  • Jeśli expr1 i expr2 są datami, wynik jest wynikiem INTERVAL DAYS.
  • Jeśli expr1 lub expr2 są sygnaturą CZASOWĄ, wynik jest wynikiem INTERVAL DAY TO SECOND.
  • Jeśli expr1 i expr2 są interwałami miesiąca roku, wynik jest interwałem miesiąca wystarczająco szerokiej liczby jednostek do reprezentowania wyniku.
  • Jeśli expr1 i expr2 są interwałami godzin dnia, wynik jest interwałem czasu dnia wystarczająco szerokiej liczby jednostek do reprezentowania wyniku.
  • W przeciwnym razie typ wyniku jest zgodny z expr1parametrem .

Jeśli oba wyrażenia są interwałami, muszą być z tej samej klasy.

Po odjęciu interwału miesiąca od daty usługa Databricks SQL gwarantuje, że wynikowa data jest dobrze sformułowana.

Jeśli wynik przepełni typ wyniku, usługa SQL usługi Databricks zgłasza błąd ARITHMETIC_OVERFLOW .

Użyj try_subtract , aby powrócić NULL po przepełnieniu.

Ostrzeżenie

W środowisku Databricks Runtime, jeśli parametr spark.sql.ansi.enabled to false, przepełnienie nie powoduje błędu, ale "zawija" wynik.

Przykłady

> 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