Aracılığıyla paylaş


- (eksi işareti) işleci

Şunlar için geçerlidir: onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime

'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 INTERVAL ifadesi.
  • expr2: Kabul edilen 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 ortak en yüksek türüdür.
  • Tarih expr1 ise ve expr2 gün-saat aralığıysa, sonuç bir ZAMAN DAMGASI olur.
  • Zaman expr1 DAMGASı ise ve expr2 bir aralıksa, sonuç bir ZAMAN DAMGASI olur.
  • ve expr2 DAT'lar 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ş birimlerden oluşan bir yıl-ay aralığıdır.
  • ve expr2 gün-saat aralıkları iseexpr1, sonuç, sonucu temsil etmek için yeterince geniş birimlerden oluşan bir gün-saat 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 bir 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ünün taşması durumunda Databricks SQL bir ARITHMETIC_OVERFLOW hatası oluşturur.

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

Uyarı

Databricks Runtime'da spark.sql.ansi.enabled isefalse, taş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