- (sinal de subtração) operador

Aplica-se a:Marque Sim Databricks SQL Marque Sim Databricks Runtime

Devolve a subtração de expr2 de expr1.

Sintaxe

expr1 - expr2

Argumentos

  • expr1: Uma expressão numérica, DATA, HORA, CARIMBO TEMPORAL ou INTERVALO.
  • expr2: O tipo aceite depende do tipo de expr1:
    • Se expr1 é um numérico expr2 deve ser expressão numérica.
    • Se expr1 for um intervalo de um ano-mês ou dia-tempo, expr2 deve ser da classe correspondente de intervalo.
    • Se expr1 for uma HORA, expr2 deve ser uma HORA ou um intervalo diurno.
    • Caso contrário expr2 , deve ser um carimbo de data ou hora.

Devoluções

O tipo de resultado é determinado pela seguinte ordem:

  • Se expr1 for numérico, o resultado é o tipo máximo comum dos argumentos.
  • Se expr1 é uma DATA e expr2 é um intervalo de tempo de dia o resultado é um carimbo de data/hora.
  • Se expr1 for um TEMPO e expr2 for um intervalo diurno, o resultado é um TEMPO com a maior precisão dos dois operandos. Se o resultado ficar fora de [00:00:00, 24:00:00), Azure Databricks aumenta DATETIME_OVERFLOW.
  • Se expr1 e expr2 forem TEMPOS, o resultado é um DAY-TIME INTERVAL.
  • Se expr1 for um TIMESTAMP e expr2 for um intervalo, o resultado será um TIMESTAMP.
  • Se expr1 e expr2 são DATEs, o resultado é um INTERVAL DAYS.
  • Se expr1 ou expr2 são TIMESTAMP o resultado é um INTERVAL DAY TO SECONDarquivo .
  • Se expr1 e expr2 são intervalos ano-mês, o resultado é um intervalo ano-mês de unidades suficientemente amplas para representar o resultado.
  • Se expr1 e expr2 são intervalos de tempo do dia, o resultado é um intervalo de tempo do dia de unidades suficientemente amplas para representar o resultado.
  • Caso contrário, o tipo de resultado corresponde a expr1.

Se ambas as expressões forem intervaladas, devem ser da mesma classe.

Quando subtrai um intervalo ano-mês de uma DATA, o Azure Databricks garante que a data resultante está bem definida.

Se o resultado ultrapassar o tipo de resultado, Azure Databricks gera um erro ARITHMETIC_OVERFLOW ou INTERVAL_ARITHMETIC_OVERFLOW.

Use try_subtract para retornar NULL em caso de estouro.

Aviso

No Databricks Runtime, se spark.sql.ansi.enabled for false, um estouro não causará um erro, mas "encapsulará" o resultado.

Condições de erro comuns

Exemplos

> 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