- (減號) 運算子

適用于:核取標示為是 Databricks SQL 檢查標示為是 Databricks Runtime

從 傳回 的 expr2expr1 減法。

語法

expr1 - expr2

參數

  • expr1:數值、DATE、TIMESTAMP 或 INTERVAL 運算式。
  • expr2:接受的類型取決於 的類型 expr
    • 如果 expr1 是數值必須是數值 expr2 運算式
    • 如果 expr1 是年-月或日時間間隔, expr2 則必須是相符的間隔類別。
    • 否則 expr2 必須是 DATE 或 TIMESTAMP。

返回

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

  • 如果 expr1 是數值,則結果為引數的常見最大類型。
  • 如果 expr1 是 DATE,而且 expr2 是日期時間間隔,則結果為 TIMESTAMP。
  • 如果 expr1 是 TIMESTAMP,而且 expr2 是間隔,則結果為 TIMESTAMP。
  • 如果 expr1expr2 是 DATE,則結果為 INTERVAL DAYS
  • 如果 expr1expr2 是 TIMESTAMP,則結果為 INTERVAL DAY TO SECOND
  • 如果 expr1expr2 是年月間隔,則結果會是寬寬單位的年份間隔,以表示結果。
  • 如果 expr1expr2 是日時間間隔,則結果為足夠寬單位的日時間間隔,以表示結果。
  • 否則,結果類型會 expr1 比對 。

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

當您從 DATE 減去年月間隔時,Databricks SQL 可確保產生的日期格式正確。

如果結果溢位結果類型,Databricks SQL 會引發 ARITHMETIC_OVERFLOW 錯誤。

使用 try_subtract 在溢位時傳回 NULL

警告

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

例子

> 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