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

Erreur de dépassement arithmétique lors de la conversion de l'expression en type de données datetime

Le 31 septembre n'est pas une date, donc SQL ne peut pas le convertir en une.

En aparté, vous devez coder en dur les dates dans un format spécifique à la culture (aaaaMMjj). 01/08/2012 peut être converti au 1er août sur votre serveur, mais exécuté sur un autre et cela pourrait être le 8 janvier. 20120801 sera converti au 1er août sur tous machines.

De plus, pourquoi convertissez-vous les dates en NVARCHAR ? Vous supprimez tout avantage des indices dont vous disposez et effectuez également des conversions implicites et explicites inutiles. En supposant MESSAGEINSERTDATE est une colonne DATETIME que vous pouvez simplement utiliser

WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'

Si vous devez supprimer l'heure de MESSAGEINSERTDATE utiliser

CAST(MESSAGEINSERTDATE AS DATE)