31 september is geen datum, dus SQL kan het niet naar een datum converteren.
Even terzijde, je moet datums hard coderen in een cultuurspecifiek formaat (jjjjMMdd). 01/08/2012
kan converteren naar 1 augustus op uw server, maar op een andere draaien en het kan 8 januari zijn. 20120801 wordt omgezet naar 1 augustus op alle machines.
Bovendien Waarom converteert u datums naar NVARCHAR
? U verwijdert alle voordelen van indices die u heeft en voert ook onnodige impliciete en expliciete conversies uit. Uitgaande van MESSAGEINSERTDATE
is een DATETIME-kolom die u gewoon zou kunnen gebruiken
WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'
Als u de tijd wilt verwijderen van MESSAGEINSERTDATE
gebruik
CAST(MESSAGEINSERTDATE AS DATE)