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

Ret "dato er inkompatibel med int" i SQL Server, når du tilføjer til eller trækker fra en dato

Hvis du får fejlmeddelelsen "Msg 206", der lyder "Operand type clash:date er inkompatibel med int" i SQL Server, mens du forsøger at tilføje til (eller trække fra) en dato, er det sandsynligvis fordi du forsøger at udføre aritmetik mellem et integer og en date værdi.

For at løse dette problem skal du enten ændre date værdi til en datetime værdi eller brug DATEADD() funktion.

Eksempel på fejlen

Her er et eksempel på kode, der producerer fejlen:

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 dette tilfælde erklærede jeg en variabel som en datoværdi, tildelte en værdi, og så forsøgte jeg at tilføje et heltal til den dato.

Løsning 1

En måde at løse dette problem på er at bruge en datetime værdi i stedet for date værdi:

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

Resultat:

2035-10-16 00:00:00.000

Dette har naturligvis den effekt, at der er inkluderet en (potentielt unødvendig) tidsværdi. Vi kan konvertere resultatet tilbage til en date værdi ved hjælp af enten CONVERT() eller CAST() :

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

Resultat:

2035-10-16

Løsning 2

En anden måde at løse dette problem på er at bruge DATEADD() funktion til at udføre aritmetikken:

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

Resultat:

2035-10-16

  1. Tuning af SQL Server Reporting Services

  2. MySQL PÅ DUPLIKAT NØGLE - sidste indsættelses-id?

  3. Dræb en postgresql-session/forbindelse

  4. masseindsæt fra Java til Oracle