- (減號) 運算符

適用於:核取記號為「是」Databricks SQL 核取記號為「是」Databricks Runtime

傳回 expr2 與 expr1 的差集。

語法

expr1 - expr2

引數

  • expr1:一個數字、日期、時間、時間戳或區間表達式。
  • expr2:接受的類型取決於 的類型 expr1:
    • 若 expr1 是數值 expr2 ,則 必為數值表達式。
    • 如果 expr1 是年月或日時間間隔, expr2 則必須是相符的間隔類別。
    • 如果 expr1 是時間,則 expr2 必須是時間或白天與時間的區間。
    • 否則 expr2 必須是 DATE 或 TIMESTAMP。

傳回

結果類型會依下列順序決定:

  • 如果 expr1 為數值,則結果為自變數的常見最大類型。
  • 如果 expr1 是 DATE,而且 expr2 是一天時間間隔,則結果為 TIMESTAMP。
  • 若 expr1 是時間,是 expr2 日-時間區間,則結果為兩個運算元精度較高的時間。 若結果低於[00:00:00, 24:00:00),Azure Databricks會升高DATETIME_OVERFLOW。
  • 若 expr1 和 expr2 是時間,則結果為 DAY-TIME INTERVAL。
  • 如果 expr1 是 TIMESTAMP,而且 expr2 是間隔,則結果為 TIMESTAMP。
  • 如果 expr1 與 expr2 DATE,結果為 INTERVAL DAYS。
  • 如果 expr1 或 expr2 TIMESTAMP,則結果為 INTERVAL DAY TO SECOND。
  • 如果 expr1 和 expr2 是年月間隔,則結果為足夠寬的單位的年月間隔來表示結果。
  • 如果 expr1 和 expr2 是日間時間間隔,則結果為足夠寬的單位日時間間隔,以表示結果。
  • 否則,結果類型會比對 expr1。

如果兩個表達式都是間隔,則必須是相同的類別。

當你從日期中減去一年月的間隔時,Azure Databricks 確保所產生的日期是正確格式的。

若結果超出該結果型別,Azure Databricks會產生 ARITHMETIC_OVERFLOW 或 INTERVAL_ARITHMETIC_OVERFLOW 錯誤。

使用 try_subtract 在溢位時傳回 NULL 。

警告

在 Databricks Runtime 中,如果 spark.sql.ansi.enabled 為 false,則溢位不會造成錯誤,而是會改為「包裝」結果。

常見錯誤條件

範例

> 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 TIME'12:30:00' - INTERVAL '2' HOUR
 10:30:00

> SELECT TIME'14:30:00' - TIME'10:15:00'
 INTERVAL '04:15:00' HOUR TO SECOND

>  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