Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

„Datum ist nicht kompatibel mit int“ in SQL Server beim Addieren oder Subtrahieren von einem Datum behoben

Wenn Sie beim Versuch, ein Datum zu addieren (oder davon zu subtrahieren), die Fehlermeldung „Msg 206“ mit dem Inhalt „Operand type clash:date is incompatible with int“ in SQL Server erhalten, liegt dies wahrscheinlich daran, dass Sie versuchen, arithmetische Berechnungen durchzuführen zwischen einer integer und ein date Wert.

Um dieses Problem zu beheben, ändern Sie entweder das date Wert zu einem datetime Wert oder verwenden Sie DATEADD() Funktion.

Beispiel für den Fehler

Hier ist ein Codebeispiel, das den Fehler erzeugt:

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

Ergebnis:

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

In diesem Fall habe ich eine Variable als Datumswert deklariert, einen Wert zugewiesen und dann versucht, diesem Datum eine Ganzzahl hinzuzufügen.

Lösung 1

Eine Möglichkeit, dieses Problem zu beheben, besteht darin, ein datetime zu verwenden Wert anstelle des date Wert:

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

Ergebnis:

2035-10-16 00:00:00.000

Dies hat offensichtlich den Effekt, dass ein (möglicherweise unnötiger) Zeitwert enthalten ist. Wir können das Ergebnis wieder in ein date umwandeln Wert entweder mit CONVERT() oder CAST() :

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

Ergebnis:

2035-10-16

Lösung 2

Eine andere Möglichkeit, dieses Problem zu beheben, ist die Verwendung von DATEADD() Funktion zur Durchführung der Arithmetik:

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

Ergebnis:

2035-10-16