Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Correction de "la date est incompatible avec int" dans SQL Server lors de l'ajout ou de la soustraction d'une date

Si vous obtenez le message d'erreur "Msg 206" indiquant "Clash de type d'opérande :la date est incompatible avec int" dans SQL Server lorsque vous essayez d'ajouter (ou de soustraire) une date, c'est probablement parce que vous essayez d'effectuer des opérations arithmétiques entre un integer et une date valeur.

Pour résoudre ce problème, modifiez la date valeur à un datetime valeur ou utilisez le DATEADD() fonction.

Exemple d'erreur

Voici un exemple de code qui génère l'erreur :

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

Résultat :

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

Dans ce cas, j'ai déclaré une variable comme valeur de date, attribué une valeur, puis j'ai essayé d'ajouter un entier à cette date.

Solution 1

Une façon de résoudre ce problème consiste à utiliser un datetime valeur au lieu de la date valeur :

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

Résultat :

2035-10-16 00:00:00.000

Cela a évidemment pour effet d'inclure une valeur de temps (potentiellement inutile). Nous pouvons reconvertir le résultat en une date valeur en utilisant soit CONVERT() ou CAST() :

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

Résultat :

2035-10-16

Solution 2

Une autre façon de résoudre ce problème consiste à utiliser le DATEADD() fonction pour effectuer l'arithmétique :

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

Résultat :

2035-10-16