31 września nie jest datą, więc SQL nie może przekonwertować jej na taką datę.
Na marginesie powinieneś zakodować daty w niespecyficznym formacie kulturowym (rrrrMMdd). 01/08/2012
może przekonwertować się na 1 sierpnia na twoim serwerze, ale działać na innym i może to być 8 stycznia. 20120801 zostanie przekonwertowany na 1 sierpnia wszystkich maszyny.
Dodatkowo Dlaczego konwertujesz daty na NVARCHAR
? ? Usuwasz wszelkie korzyści z posiadanych indeksów, a także przeprowadzasz niepotrzebne konwersje niejawne i jawne. Zakładając, że MESSAGEINSERTDATE
to kolumna DATETIME, której możesz po prostu użyć
WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'
Jeśli chcesz usunąć czas z MESSAGEINSERTDATE
użyj
CAST(MESSAGEINSERTDATE AS DATE)