Om du får felmeddelandet "Msg 206" som lyder "Operand typ clash:date is incompatible with int" i SQL Server när du försöker lägga till (eller subtrahera från) ett datum, beror det förmodligen på att du försöker utföra aritmetik mellan ett integer
och ett date
värde.
För att åtgärda problemet, ändra antingen date
värde till en datetime
värde eller använd DATEADD()
funktion.
Exempel på felet
Här är ett exempel på kod som ger felet:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date + 1;
Resultat:
Msg 206, Level 16, State 2, Line 3 Operand type clash: date is incompatible with int
I det här fallet deklarerade jag en variabel som ett datumvärde, tilldelade ett värde och sedan försökte jag lägga till ett heltal till det datumet.
Lösning 1
Ett sätt att lösa det här problemet är att använda en datetime
värde istället för date
värde:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date + 1;
Resultat:
2035-10-16 00:00:00.000
Detta har uppenbarligen effekten av att ett (potentiellt onödigt) tidsvärde ingår. Vi kan konvertera resultatet tillbaka till ett date
värde med antingen CONVERT()
eller CAST()
:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date + 1 AS date);
Resultat:
2035-10-16
Lösning 2
Ett annat sätt att lösa problemet är att använda DATEADD()
funktion för att utföra aritmetiken:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(day, 1, @date);
Resultat:
2035-10-16