Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Correggere "la data non è compatibile con int" in SQL Server durante l'aggiunta o la sottrazione da una data

Se ricevi il messaggio di errore "Msg 206" che dice "Clash di tipo operando:la data è incompatibile con int" in SQL Server durante il tentativo di aggiungere (o sottrarre da) una data, probabilmente è perché stai cercando di eseguire l'aritmetica tra un integer e una date valore.

Per risolvere questo problema, cambia la date valore in un datetime valore o utilizzare il DATEADD() funzione.

Esempio di errore

Ecco un esempio di codice che produce l'errore:

DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date + 1;

Risultato:

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

In questo caso, ho dichiarato una variabile come valore di data, ho assegnato un valore, quindi ho provato ad aggiungere un numero intero a quella data.

Soluzione 1

Un modo per risolvere questo problema è utilizzare un datetime valore invece della date valore:

DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date + 1;

Risultato:

2035-10-16 00:00:00.000

Questo ovviamente ha l'effetto di includere un valore temporale (potenzialmente non necessario). Possiamo riconvertire il risultato in una date valore utilizzando CONVERT() o CAST() :

DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date + 1 AS date);

Risultato:

2035-10-16

Soluzione 2

Un altro modo per risolvere questo problema è utilizzare DATEADD() funzione per eseguire l'aritmetica:

DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(day, 1, @date);

Risultato:

2035-10-16