sql >> Databáze >  >> RDS >> Sqlserver

Oprava „datum je nekompatibilní s int“ v SQL Server při přidávání nebo odečítání od data

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

  1. Nasazení databáze z ovládání zdroje

  2. Jak vytvořit databázový diagram v Accessu

  3. Funkce REGEXP_INSTR() v Oracle

  4. Načíst definici sloupce pro sadu výsledků uložené procedury