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)