-
(znaménko minus) – operátor
Platí pro: Databricks SQL 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 typuexpr
:- 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.
- Pokud
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 aexpr2
jedná se o denní interval, výsledkem je časové razítko. - Pokud
expr1
je časové razítko aexpr2
jedná se o interval, je výsledkem časové razítko. - Pokud
expr1
aexpr2
jsou DATEs výsledkem jeINTERVAL DAYS
. - Pokud
expr1
neboexpr2
jsou TIMESTAMP výsledek je .INTERVAL DAY TO SECOND
- Pokud
expr1
aexpr2
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á oexpr2
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