Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Оператор
Область применения:
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являются интервалами "год-месяц", то результат также будет интервалом "год-месяц" с достаточно широкими единицами измерения для представления результата. - если
expr1иexpr2являются интервалами "время дня", то результат также будет интервалом "время дня" с достаточно широкими единицами измерения для представления результата; - в противном случае тип результата будет соответствовать
expr1.
Если оба выражения являются интервалами, они должны быть одного класса.
При вычитание интервала года из ДАТЫ Azure Databricks гарантирует, что результирующая дата хорошо сформирована.
Если результат переполнен типом результата, Azure Databricks вызывает ошибку ARITHMETIC_OVERFLOW или INTERVAL_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