次の方法で共有


- (マイナス記号) 演算子

適用対象: 「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

expr1 からの expr2 の減算を返します。

構文

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 になります。
  • expr1 または expr2 が TIMESTAMP である場合、結果は INTERVAL DAY TO SECOND になります。
  • expr1expr2 が年月の間隔の場合、結果は、結果を表すために十分に広い単位の 1 か月の間隔になります。
  • expr1expr2 が日付と時刻の間隔である場合、結果は、結果を表すための十分に幅広い単位での日付と時刻の間隔です。
  • それ以外の場合、結果の型は、expr1 と一致します。

両方の式が間隔である場合、それらは同じクラスである必要があります。

年と月の間隔を DATE から減算すると、Databricks SQL によって、結果の日付は確実に整形式になります。

結果が結果の型をオーバーフローした場合、Databricks SQL で ARITHMETIC_OVERFLOW エラーが発生します。

オーバーフロー時に NULL を返すには try_subtract を使用します。

警告

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