- (mínuszjel) operátor

A következőre vonatkozik:check marked yes Databricks SQL check marked yes 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ól exprfü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.

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, és expr2 egy nap-idő intervallum, akkor az eredmény IDŐBÉLYEG.
  • Ha expr1 IDŐBÉLYEG, és expr2 intervallum, akkor az eredmény IDŐBÉLYEG.
  • Ha expr1 és expr2 a DATE, az eredmény egy INTERVAL DAYS.
  • Ha expr1 vagy expr2 IDŐBÉLYEGző, az eredmény egy INTERVAL DAY TO SECOND.
  • Ha expr1 az és expr2 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 és expr2 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