適用於:
Databricks SQL
Databricks Runtime
傳回 expr2 與 expr1 的差集。
語法
expr1 - expr2
引數
-
expr1:數值、日期、TIMESTAMP 或 INTERVAL 表達式。 -
expr2:接受的類型取決於 的類型expr:- 如果
expr1是數值expr2必須是數值表達式 - 如果
expr1是年月或日時間間隔,expr2則必須是相符的間隔類別。 - 否則
expr2必須是 DATE 或 TIMESTAMP。
- 如果
傳回
結果類型會依下列順序決定:
- 如果
expr1為數值,則結果為自變數的常見最大類型。 - 如果
expr1是 DATE,而且expr2是一天時間間隔,則結果為 TIMESTAMP。 - 如果
expr1是 TIMESTAMP,而且expr2是間隔,則結果為 TIMESTAMP。 - 如果
expr1與expr2DATE,結果為INTERVAL DAYS。 - 如果
expr1或expr2TIMESTAMP,則結果為INTERVAL DAY TO SECOND。 - 如果
expr1和expr2是年月間隔,則結果為足夠寬的單位的年月間隔來表示結果。 - 如果
expr1和expr2是日間時間間隔,則結果為足夠寬的單位日時間間隔,以表示結果。 - 否則,結果類型會比對
expr1。
如果兩個表達式都是間隔,則必須是相同的類別。
當您從 DATE 減去年月間隔時,Databricks SQL 可確保產生的日期格式良好。
如果結果溢位結果類型,Databricks SQL 就會 引發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 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