Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Napraw „data jest niezgodna z int” w SQL Server podczas dodawania lub odejmowania od daty

Jeśli otrzymujesz komunikat o błędzie „Msg 206”, który brzmi „Zderzenie typu operandu:data jest niezgodna z int” w programie SQL Server podczas próby dodania (lub odjęcia od) daty, prawdopodobnie próbujesz wykonać arytmetykę między integer i date wartość.

Aby rozwiązać ten problem, zmień date wartość na datetime wartość lub użyj DATEADD() funkcja.

Przykład błędu

Oto przykład kodu, który generuje błąd:

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

Wynik:

Msg 206, Level 16, State 2, Line 3
Operand type clash: date is incompatible with int

W tym przypadku zadeklarowałem zmienną jako wartość daty, przypisałem wartość, a następnie próbowałem dodać liczbę całkowitą do tej daty.

Rozwiązanie 1

Jednym ze sposobów rozwiązania tego problemu jest użycie datetime wartość zamiast date wartość:

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

Wynik:

2035-10-16 00:00:00.000

To oczywiście skutkuje uwzględnieniem (potencjalnie niepotrzebnej) wartości czasu. Możemy przekonwertować wynik z powrotem na date wartość za pomocą CONVERT() lub CAST() :

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

Wynik:

2035-10-16

Rozwiązanie 2

Innym sposobem rozwiązania tego problemu jest użycie DATEADD() funkcja do wykonywania arytmetyki:

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

Wynik:

2035-10-16

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NEWID() vs NEWSEQUENTIALID() w SQL Server:jaka jest różnica?

  2. Przecinki w danych CSV

  3. Sposoby naprawy błędu we/wy opartego na spójności logicznej w programie SQL Server

  4. Jak osiągnąć limity 8060 bajtów na wiersz i 8000 na wartość (varchar, nvarchar)?

  5. INT vs Unique-Identifier dla pola ID w bazie danych