Udostępnij za pośrednictwem


- (znak minus) — operator

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

Zwraca odejmowanie wartości expr2 z .expr1

Składnia

expr1 - expr2

Argumenty

  • expr1: wyrażenie liczbowe, DATE, TIMESTAMP lub INTERVAL.
  • expr2: Akceptowany typ zależy od typu expr:
    • Jeśli expr1 wartość jest liczbowa 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ć znacznikiem DATY lub znacznika czasu.

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 datą i expr2 jest interwałem dnia, wynik jest sygnaturą CZASOWĄ.
  • Jeśli expr1 jest znacznikiem TIMESTAMP i expr2 jest interwałem, wynik jest sygnaturą CZASOWĄ.
  • Jeśli expr1 element i expr2 są datami, wynik to INTERVAL DAYS.
  • Jeśli expr1 lub expr2 jest znacznikiem TIMESTAMP, wynik to INTERVAL DAY TO SECOND.
  • Jeśli expr1 interwały expr2 i są interwałami miesięcy lat, wynik jest interwałem miesiąca z wystarczająco szerokimi jednostkami do reprezentowania wyniku.
  • Jeśli expr1 i expr2 są interwałami dni, wynik jest interwałem dziennym wystarczająco szerokich jednostek do reprezentowania wyniku.
  • W przeciwnym razie typ wyniku jest zgodny z expr1.

Jeśli oba wyrażenia są interwałami, muszą należeć do tej samej klasy.

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

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

Użyj try_subtract , aby powrócić NULL do przepełnienia.

Ostrzeżenie

Jeśli w środowisku Databricks Runtime spark.sql.ansi.enabled to false, przepełnienie nie powoduje błędu, ale "opakowuje" 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