Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Arithmetischer Überlauffehler beim Konvertieren von Ausdruck in den Datentyp datetime

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)