Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Corrigir “data é incompatível com int” no SQL Server ao adicionar ou subtrair uma data


Se você estiver recebendo a mensagem de erro “Msg 206” que diz “Choque de tipo de operando:data é incompatível com int” no SQL Server ao tentar adicionar (ou subtrair) uma data, provavelmente é porque você está tentando realizar cálculos aritméticos entre um integer e uma date valor.

Para corrigir esse problema, altere a date valor para um datetime valor ou use o DATEADD() função.

Exemplo do erro


Aqui está um exemplo de código que produz o erro:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date + 1;

Resultado:
Msg 206, Level 16, State 2, Line 3
Operand type clash: date is incompatible with int

Nesse caso, declarei uma variável como um valor de data, atribuí um valor e tentei adicionar um inteiro a essa data.

Solução 1


Uma maneira de corrigir esse problema é usar um datetime valor em vez da date valor:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date + 1;

Resultado:
2035-10-16 00:00:00.000

Isso obviamente tem o efeito de incluir um valor de tempo (potencialmente desnecessário). Podemos converter o resultado de volta para uma date valor usando CONVERT() ou CAST() :
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date + 1 AS date);

Resultado:
2035-10-16

Solução 2


Outra maneira de corrigir esse problema é usar o DATEADD() função para realizar a aritmética:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(day, 1, @date);

Resultado:
2035-10-16