Sdílet prostřednictvím


- Operátor (znaménko minus)

Platí pro:check označeno ano Kontrola Databricks SQL označená 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: Přijatý typ závisí na typu expr:
    • Pokud expr1 je číselný expr2 výraz, musí být číselný výraz.
    • Pokud expr1 je interval rok-měsíc nebo den-čas, expr2 musí být odpovídající třídy intervalu.
    • Jinak expr2 musí být DATUM nebo ČASOVÉ RAZÍTKO.

Vrátí

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

  • Pokud expr1 je číselný, výsledek je běžný maximální typ argumentů.
  • Pokud expr1 je hodnota DATUM a expr2 jedná se o denní interval, výsledkem je časové razítko.
  • Pokud expr1 je TIMESTAMP a expr2 je interval, výsledek je TIMESTAMP.
  • Pokud expr1 a expr2 jsou daty DAT, výsledek je .INTERVAL DAYS
  • Pokud expr1 nebo expr2 jsou TIMESTAMP, výsledek je .INTERVAL DAY TO SECOND
  • Pokud expr1 a expr2 jsou intervaly mezi rokem a měsíci, výsledkem je interval mezi rokem a měsícem s dostatečně širokými jednotkami, aby byl výsledek reprezentovaný.
  • Pokud expr1 a expr2 jsou denní intervaly, výsledkem je denní interval dostatečně širokých jednotek, aby reprezentoval výsledek.
  • V opačném případě typ výsledku odpovídá expr1.

Pokud jsou oba výrazy intervalem, musí být stejné třídy.

Když od data odečtete roční měsíční interval, Databricks SQL zajistí, aby výsledné datum bylo správně tvarované.

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

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

Upozornění

Pokud je falsev modulu Databricks Runtime spark.sql.ansi.enabled , 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