- (eksi işareti) işleci

Şunun için geçerlidir:evet olarak işaretlendi Databricks SQL denetimi yes Databricks Runtime olarak işaretlendi

'den expr1çıkarma işlemini expr2 döndürür.

Söz dizimi

expr1 - expr2

Bağımsız değişkenler

  • expr1: Sayısal, TARİh, ZAMAN DAMGASI veya ARALIK ifadesi.
  • expr2: Kabul edilen tür türü türüne exprbağlıdır:
    • Sayısal expr1 ise sayısal expr2 ifade olmalıdır
    • Yıl-ay veya gün-zaman aralığı ise expr1 , expr2 eşleşen aralık sınıfından olmalıdır.
    • Aksi takdirde expr2 DATE veya TIMESTAMP olmalıdır.

Döndürülenler

Sonuç türü aşağıdaki sırayla belirlenir:

  • Sayısalsa expr1 , sonuç bağımsız değişkenlerin en yüksek türüdür.
  • expr1 Tarih ise ve expr2 gün-saat aralığıysa, sonuç zaman DAMGASı olur.
  • TimesTAMP expr1 ise ve expr2 bir aralıksa, sonuç zaman DAMGASı olur.
  • ve expr2 DATE'ler ise expr1 sonuç bir INTERVAL DAYSolur.
  • ZAMAN DAMGASI ise expr1 veya expr2 ise, sonuç bir INTERVAL DAY TO SECONDolur.
  • ve expr2 yıl-ay aralıkları iseexpr1, sonuç, sonucu temsil etmek için yeterince geniş birimlerin yıl ayı aralığıdır.
  • ve expr2 gün-zaman aralıkları iseexpr1, sonuç sonucu temsil etmek için yeterince geniş birimlerin gün-zaman aralığıdır.
  • Aksi takdirde sonuç türü ile eşleşir expr1.

Her iki ifade de aralıksa aynı sınıfta olmalıdır.

Bir TARİh'ten yıl ay aralığını çıkardığınızda Databricks SQL, sonuçta elde edilen tarihin iyi biçimlendirilmiş olmasını sağlar.

Sonuç, sonuç türüne taşıyorsa Databricks SQL bir ARITHMETIC_OVERFLOW hatası oluşturur.

Taşmaya geri dönmek NULL için try_subtract kullanın.

Uyarı

Databricks Runtime'da spark.sql.ansi.enabled ise falsetaşma bir hataya neden olmaz ancak sonucu "sarmalar".

Örnekler

> 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