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