Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Поправете „датата е несъвместима с int“ в SQL Server при добавяне към или изваждане от дата

Ако получавате съобщение за грешка „Msg 206“, което гласи „Сблъсък на тип операнд:датата е несъвместима с int“ в SQL Server, докато се опитвате да добавите (или извадите) дата, това вероятно е защото се опитвате да извършите аритметика между integer и date стойност.

За да коригирате този проблем, променете date стойност към datetime стойност или използвайте DATEADD() функция.

Пример за грешката

Ето пример за код, който създава грешката:

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

Резултат:

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

В този случай декларирах променлива като стойност за дата, присвоих стойност, след което се опитах да добавя цяло число към тази дата.

Решение 1

Един от начините да коригирате този проблем е да използвате datetime стойност вместо date стойност:

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

Резултат:

2035-10-16 00:00:00.000

Това очевидно има ефект от включването на (потенциално ненужна) времева стойност. Можем да преобразуваме резултата обратно в date стойност с помощта на CONVERT() или CAST() :

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

Резултат:

2035-10-16

Решение 2

Друг начин да коригирате този проблем е да използвате DATEADD() функция за извършване на аритметиката:

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

Резултат:

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. Как се стига до ограничения от 8060 байта на ред и 8000 на (varchar, nvarchar) стойност?

  2. Инсталиране стъпка по стъпка на SQL Server 2017 -1

  3. Защо ISNUMERIC('.') връща 1?

  4. Най-ефективният начин на T-SQL да добавите varchar отляво до определена дължина?

  5. Клаузата ORDER BY е невалидна в изгледи, вградени функции, производни таблици, подзаявки и изрази за общи таблици