Megosztás a következőn keresztül:


- (mínuszjel) operátor

A következőkre vonatkozik: jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime

A kivonást expr2 adja vissza a forrásból expr1.

Syntax

expr1 - expr2

Argumentumok

  • expr1: Numerikus, DÁTUM, IDŐBÉLYEG vagy INTERVALLUM kifejezés.
  • expr2: Az elfogadott típus a következő típustól exprfügg:
    • Ha expr1 egy numerikus expr2 kifejezésnek numerikus kifejezésnek kell lennie
    • Ha expr1 egy év- vagy napidőintervallum, expr2 akkor az intervallum egyező osztályának kell lennie.
    • Ellenkező esetben expr2 dátumnak vagy IDŐBÉLYEGnek kell lennie.

Válaszok

Az eredménytípus a következő sorrendben van meghatározva:

  • Ha expr1 numerikus, az eredmény az argumentumok általános maximális típusa.
  • Ha expr1 dátum, és expr2 napi 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 vannak DATEs az eredmény egy INTERVAL DAYS.
  • Ha expr1 IDŐBÉLYEGző expr2 , akkor az eredmény egy INTERVAL DAY TO SECOND.
  • Ha expr1 és expr2 vannak évhavi intervallumok, az eredmény egy olyan év-hónap intervallum, amely kellően széles egységekből áll, hogy az eredményt képviselje.
  • Ha expr1 és expr2 vannak nap-idő intervallumok, az eredmény egy olyan nap-idő intervallum, amely elegendően széles egységekből áll az eredmény megjelenítéséhez.
  • 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 biztosítja, hogy az eredményül 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 okoz.

A try_subtract használatával visszatérhet NULL a túlcsorduláshoz.

Figyelmeztetés

A Databricks Futtatókörnyezetben, ha spark.sql.ansi.enabled van false, a túlcsordulás nem okoz hibát, hanem "körbefuttatja" 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