適用対象:
Databricks SQL
Databricks Runtime
expr2 からの expr1 の減算を返します。
構文
expr1 - expr2
引数
-
expr1: DATE、TIMESTAMP、または INTERVAL の数値式。 -
expr2: 指定できる型は、のexpr型によって異なります。-
expr1が数値である場合は、expr2を数値式とする必要があります -
expr1が年と月の間隔または日付と時刻の間隔である場合、expr2は一致する間隔のクラスである必要があります。 - それ以外の場合、
expr2は、DATE または TIMESTAMP とする必要があります。
-
戻り値
結果の型は、次の順序で決定されます。
-
expr1が数値である場合、引数の共通の最大型となります。 -
expr1が DATE であり、expr2が日付と時刻の間隔である場合、結果は TIMESTAMP です。 -
expr1が TIMESTAMP であり、expr2が間隔である場合、結果は TIMESTAMP になります。 -
expr1とexpr2が DATE である場合、結果はINTERVAL DAYSになります。 -
expr1またはexpr2が TIMESTAMP である場合、結果はINTERVAL DAY TO SECONDになります。 -
expr1とexpr2が年月の間隔の場合、結果は、結果を表すために十分に広い単位の 1 か月の間隔になります。 -
expr1とexpr2が日付と時刻の間隔である場合、結果は、結果を表すための十分に幅広い単位での日付と時刻の間隔です。 - それ以外の場合、結果の型は、
expr1と一致します。
両方の式が間隔である場合、それらは同じクラスである必要があります。
年と月の間隔を DATE から減算すると、Databricks SQL によって、結果の日付は確実に整形式になります。
結果が結果の型をオーバーフローした場合、Databricks SQL で ARITHMETIC_OVERFLOW エラーが発生します。
警告
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