Jeśli otrzymujesz komunikat o błędzie „Msg 206”, który brzmi „Zderzenie typu operandu:data jest niezgodna z int” w programie SQL Server podczas próby dodania (lub odjęcia od) daty, prawdopodobnie próbujesz wykonać arytmetykę między integer
i date
wartość.
Aby rozwiązać ten problem, zmień date
wartość na datetime
wartość lub użyj DATEADD()
funkcja.
Przykład błędu
Oto przykład kodu, który generuje błąd:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date + 1;
Wynik:
Msg 206, Level 16, State 2, Line 3 Operand type clash: date is incompatible with int
W tym przypadku zadeklarowałem zmienną jako wartość daty, przypisałem wartość, a następnie próbowałem dodać liczbę całkowitą do tej daty.
Rozwiązanie 1
Jednym ze sposobów rozwiązania tego problemu jest użycie datetime
wartość zamiast date
wartość:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date + 1;
Wynik:
2035-10-16 00:00:00.000
To oczywiście skutkuje uwzględnieniem (potencjalnie niepotrzebnej) wartości czasu. Możemy przekonwertować wynik z powrotem na date
wartość za pomocą CONVERT()
lub CAST()
:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date + 1 AS date);
Wynik:
2035-10-16
Rozwiązanie 2
Innym sposobem rozwiązania tego problemu jest użycie DATEADD()
funkcja do wykonywania arytmetyki:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(day, 1, @date);
Wynik:
2035-10-16