-
Operátor (znaménko minus)
Platí pro: Kontrola 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
: Přijatý typ závisí na typuexpr
:- 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.
- Pokud
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 aexpr2
jedná se o denní interval, výsledkem je časové razítko. - Pokud
expr1
je TIMESTAMP aexpr2
je interval, výsledek je TIMESTAMP. - Pokud
expr1
aexpr2
jsou daty DAT, výsledek je .INTERVAL DAYS
- Pokud
expr1
neboexpr2
jsou TIMESTAMP, výsledek je .INTERVAL DAY TO SECOND
- Pokud
expr1
aexpr2
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
aexpr2
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 false
v 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