sql >> Databasteknik >  >> RDS >> Sqlserver

Fixa "datum är inkompatibelt med int" i SQL Server när du lägger till eller drar ifrån ett datum

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

  1. Hur UCASE()-funktionen fungerar i MySQL

  2. Fullständig lista över lokaler i MySQL

  3. SQL:skillnad mellan två datum

  4. Hur man installerar Cassandra v3 på CentOS 6