다음을 통해 공유


-(빼기 기호) 연산자

적용 대상: 예(예)로 표시된 확인 Databricks SQL 예(예)로 표시된 확인 Databricks 런타임

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가 연-월 간격이면 결과는 결과를 나타낼 수 있을 만큼 충분히 넓은 단위의 연-월 간격입니다.
  • expr1expr2가 일-시간 간격이면 결과는 결과를 나타낼 수 있는 충분히 넓은 단위의 일-시간 간격입니다.
  • 그렇지 않으면 결과 형식은 expr1과 일치합니다.

두 식이 모두 간격인 경우 동일한 클래스여야 합니다.

DATE에서 연도-월 간격을 빼는 경우 Databricks SQL에서 결과 날짜가 올바른 형식이 되도록 합니다.

결과가 결과 형식을 오버플로하는 경우 Databricks SQL에서 ARITHMETIC_OVERFLOW 오류가 발생합니다.

try_subtract를 사용하여 오버플로에 대해 NULL을 반환합니다.

Warning

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