Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Оператор
Область применения:
Databricks SQL
Databricks Runtime
Возвращает результат вычитания expr2 из expr1.
Синтаксис
expr1 - expr2
Аргументы
-
expr1: числовое выражение, DATE, TIME, TIME, TIMESTAMP или INTERVAL. -
expr2: принятый тип зависит от типаexpr1:- Если
expr1числовоеexpr2выражение должно быть числовым. - если
expr1является интервалом типа "год-месяц" или "время дня", тоexpr2также должно быть интервалом того же типа; - Если
expr1это время,expr2должно быть временем или интервалом дня. - во всех остальных случаях
expr2должно быть выражением DATE или TIMESTAMP.
- Если
Возвраты
Тип результата определяется по следующему алгоритму:
- если аргумент
expr1является числовым, результат имеет тип, соответствующий максимальному общему типу аргументов; - Если параметр
expr1имеет тип DATE, аexpr2является интервалом типа "время дня", то возвращается результат с типом TIMESTAMP. - Если
expr1это ВРЕМЯ иexpr2является дневным интервалом, результатом является TIME с более широкой точностью двух операндов. Если результат выходит за пределы[00:00:00, 24:00:00), Azure Databricks вызывает DATETIME_OVERFLOW. - Если
expr1иexpr2являются ТИМЕ, результатом являетсяDAY-TIME INTERVAL. - если
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 TIME'12:30:00' - INTERVAL '2' HOUR
10:30:00
> SELECT TIME'14:30:00' - TIME'10:15:00'
INTERVAL '04:15:00' HOUR TO SECOND
> 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