Sdílet prostřednictvím


- (znaménko minus) – operátor

Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime

Vrátí odčítání expr2 od expr1.

Syntaxe

expr1 - expr2

Argumenty

  • expr1: Číselný výraz, DATUM, ČASOVÉ RAZÍTKO nebo INTERVAL.
  • expr2: Akceptované typy závisí na typu expr:
    • Pokud expr1 je číselný expr2 výraz, musí být číselný výraz.
    • Pokud expr1 je interval pro rok nebo den, expr2 musí být odpovídající třídou intervalu.
    • Jinak expr2 musí být DATE nebo TIMESTAMP.

Návraty

Typ výsledku je určen v následujícím pořadí:

  • Pokud expr1 je argument číselný, je výsledkem běžný maximální typ argumentů.
  • Pokud expr1 je datem a expr2 jedná se o denní interval, výsledkem je časové razítko.
  • Pokud expr1 je časové razítko a expr2 jedná se o interval, je výsledkem časové razítko.
  • Pokud expr1 a expr2 jsou DATEs výsledkem je INTERVAL DAYS.
  • Pokud expr1 nebo expr2 jsou TIMESTAMP výsledek je .INTERVAL DAY TO SECOND
  • Pokud expr1 a expr2 jsou intervaly mezi rokem, je výsledkem interval rok-měsíc dostatečně širokých jednotek, aby představoval výsledek.
  • Pokud expr1 se jedná o expr2 denní intervaly, je výsledkem denní interval dostatečně širokých jednotek, aby představoval výsledek.
  • V opačném případě se typ výsledku shoduje expr1.

Pokud jsou oba výrazy interval, musí mít stejnou třídu.

Když odečtete interval kalendářního roku od data, Databricks SQL zajistí, že výsledné datum bude správně formátované.

Pokud výsledek přeteče typ výsledku, sql Databricks vyvolá ARITHMETIC_OVERFLOW chybu.

K návratu NULL do přetečení použijte try_subtract.

Upozorňující

Pokud je ve službě Databricks Runtime spark.sql.ansi.enabled false, přetečení nezpůsobí chybu, ale místo toho výsledek zabalí.

Příklady

> 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