Pokud se vám při pokusu o přidání (nebo odečtení) data na serveru SQL zobrazuje chybová zpráva „Msg 206“, která zní „Clash typu operand:datum není kompatibilní s int“, je to pravděpodobně proto, že se pokoušíte provést aritmetiku mezi integer
a date
hodnota.
Chcete-li tento problém vyřešit, změňte date
hodnotu na datetime
nebo použijte DATEADD()
funkce.
Příklad chyby
Zde je příklad kódu, který způsobuje chybu:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date + 1;
Výsledek:
Msg 206, Level 16, State 2, Line 3 Operand type clash: date is incompatible with int
V tomto případě jsem deklaroval proměnnou jako hodnotu data, přiřadil hodnotu a pak jsem se pokusil k tomuto datu přidat celé číslo.
Řešení 1
Jedním ze způsobů, jak tento problém vyřešit, je použít datetime
hodnotu namísto date
hodnota:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date + 1;
Výsledek:
2035-10-16 00:00:00.000
To má zjevně za následek, že je zahrnuta (potenciálně zbytečná) časová hodnota. Výsledek můžeme převést zpět na date
hodnotu pomocí CONVERT()
nebo CAST()
:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date + 1 AS date);
Výsledek:
2035-10-16
Řešení 2
Dalším způsobem, jak tento problém vyřešit, je použít DATEADD()
funkce k provedení aritmetiky:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(day, 1, @date);
Výsledek:
2035-10-16