-
(mínuszjel) operátor
A következőre vonatkozik: Databricks SQL Databricks Runtime
A kivonását expr2
adja vissza a következőből expr1
: .
Szintaxis
expr1 - expr2
Argumentumok
expr1
: Numerikus, DÁTUM, IDŐBÉLYEG vagy INTERVALLUM kifejezés.expr2
: Az elfogadott típus a típusátólexpr
függ:- Ha
expr1
numerikus,expr2
akkor numerikus kifejezésnek kell lennie - Ha
expr1
egy év- vagy nap-időintervallum,expr2
akkor a megfelelő intervallumosztálynak kell lennie. - Ellenkező esetben
expr2
dátumnak vagy IDŐBÉLYEGnek kell lennie.
- Ha
Visszatérési érték
Az eredménytípus a következő sorrendben van meghatározva:
- Ha
expr1
numerikus, az eredmény az argumentumok közös maximális típusa. - Ha
expr1
dátum, ésexpr2
egy nap-idő intervallum, akkor az eredmény IDŐBÉLYEG. - Ha
expr1
IDŐBÉLYEG, ésexpr2
intervallum, akkor az eredmény IDŐBÉLYEG. - Ha
expr1
ésexpr2
a DATE, az eredmény egyINTERVAL DAYS
. - Ha
expr1
vagyexpr2
IDŐBÉLYEGző, az eredmény egyINTERVAL DAY TO SECOND
. - Ha
expr1
az ésexpr2
az az év-hónap intervallum, az eredmény egy olyan év-hónap intervallum, amely kellően széles egységekből áll az eredmény megjelenítéséhez. - Ha
expr1
a ésexpr2
a nap időintervalluma, az eredmény egy elég széles egységből álló nap-idő intervallum, amely az eredményt képviseli. - Ellenkező esetben az eredmény típusa megegyezik
expr1
.
Ha mindkét kifejezés intervallum, akkor azonos osztályba kell tartozniuk.
Ha egy év-hónap intervallumot kivon egy DÁTUMból, a Databricks SQL gondoskodik arról, hogy az eredményként kapott dátum megfelelően legyen formázva.
Ha az eredmény túlcsordul az eredménytípuson, a Databricks SQL ARITHMETIC_OVERFLOW hibát jelez.
Túlcsordulás esetén a try_subtract használatával térhet vissza NULL
.
Figyelmeztetés
A Databricks Runtime-ban, ha a spark.sql.ansi.enabled értéke false
, a túlcsordulás nem okoz hibát, hanem "burkolja" az eredményt.
Példák
> 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