Der 31. September ist kein Datum, daher kann SQL ihn nicht in eines umwandeln.
Nebenbei sollten Sie Datumsangaben in einem kulturspezifischen Format fest codieren (yyyyMMdd). 01/08/2012
kann auf Ihrem Server auf den 1. August umgestellt werden, aber auf einem anderen ausgeführt werden, und es könnte der 8. Januar sein. 20120801 wird alle auf den 1. August umgestellt Maschinen.
Außerdem Warum konvertieren Sie Datumsangaben in NVARCHAR
? Sie entfernen alle Vorteile von Indizes, die Sie haben, und führen auch unnötige implizite und explizite Konvertierungen durch. Angenommen MESSAGEINSERTDATE
ist eine DATETIME-Spalte, die Sie einfach verwenden könnten
WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'
Wenn Sie die Uhrzeit aus MESSAGEINSERTDATE
entfernen müssen verwenden
CAST(MESSAGEINSERTDATE AS DATE)