Ich verwende diesen Code immer für die Konvertierung in datetime:
%Vor%Aber das geht nicht mehr! Ich versuchte sogar, SQL Server neu zu starten, aber das Problem bleibt:
Der Fehler im Bild ist auf Italienisch. Auf Englisch sollte sein:
Die Konvertierung eines char-Datentyps in datetime ergab eine datetime Wert außerhalb der zulässigen Werte.
Es gibt viele von SQL Server unterstützte Formate. Weitere Informationen finden Sie in der MSDN-Onlinedokumentation zu CAST und CONVERT . Die meisten dieser Formate sind abhängig abhängig davon, welche Einstellungen Sie haben - daher können diese Einstellungen manchmal funktionieren - und manchmal nicht.
Die Lösung besteht darin, das (leicht angepasste) ISO-8601-Datumsformat zu verwenden, das von SQL Server unterstützt wird - dieses Format funktioniert immer - unabhängig von Ihrem Einstellungen für SQL Server-Sprache und Datumsformat.
Das ISO-8601-Format wird von SQL Server unterstützt. Es gibt zwei Varianten:
YYYYMMDD
für gerade Daten (kein Zeitanteil); notieren Sie hier: keine Gedankenstriche! , das ist sehr wichtig! YYYY-MM-DD
ist NICHT unabhängig von den Dateformat-Einstellungen in Ihrem SQL Server und funktioniert NICHT in allen Situationen! oder:
YYYY-MM-DDTHH:MM:SS
für Datum und Uhrzeit - beachten Sie hier: Dieses Format hat Bindestriche (aber sie können weggelassen werden) und eine feste T
als Trennzeichen zwischen Datum und Uhrzeit Teil Ihrer DATETIME
. Dies gilt für SQL Server 2000 und neuer.
Wenn Sie SQL Server 2008 oder neuer und den DATE
-Datentyp verwenden (nur DATE
- nicht DATETIME
!), können Sie tatsächlich auch das YYYY-MM-DD
-Format und das verwenden funktioniert auch mit allen Einstellungen in Ihrem SQL Server.
Frag mich nicht, warum dieses ganze Thema so schwierig und etwas verwirrend ist - so ist es eben. Aber mit dem YYYYMMDD
-Format sollten Sie für jede Version von SQL Server und für jede Sprach- und Datumsformateinstellung in Ihrem SQL Server in Ordnung sein.
Also in Ihrem konkreten Fall - verwenden Sie das:
%Vor%und dies sollte bei jeder SQL Server-Installation mit den beliebigen Einstellungen für Sprache und Datumsformat funktionieren.
Wenn Sie Ihren ursprünglichen Code für amerikanisches Englisch verwenden, wird es gut funktionieren:
%Vor% Wenn Sie jedoch Italienisch (oder Deutsch oder Britisch oder Französisch) als Ihre Sprache verwenden, schlägt fehl das Format ohne T
in der Mitte der Datum / Uhrzeit-String ist NICHT sprachunabhängig und nicht "sicher":
Msg 242, Level 16, State 3, Line 4
La conversione di un tipo di di varchar in datetime ha generato un valore nicht compreso nell'intervallo dei valori consentiti.
Ich nehme an, dass das Standardformat für Datumsformate auf Ihrem Computer geändert wurde. Fügen Sie die Konvertierungsspezifikation zurück in:
%Vor%Tags und Links sql sql-server datetime sql-server-2008-r2 casting