SQL Server-Konvertierungsproblem mit datetime

8

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.

    
GVillani82 28.12.2012, 17:03
quelle

3 Antworten

15

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":

%Vor%
  

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.

    
marc_s 28.12.2012, 17:08
quelle
4

Sie versuchen, eine Zeichenfolge in eine Datetime zu konvertieren. Problem ist mit dem Datumsteil. Der beste Weg ist, die Datumszeichenfolge in ISO format (yyyymmdd) zu bekommen und dann zu konvertieren. Probieren Sie das aus;

%Vor%     
Kaf 28.12.2012 17:06
quelle
0

Ich nehme an, dass das Standardformat für Datumsformate auf Ihrem Computer geändert wurde. Fügen Sie die Konvertierungsspezifikation zurück in:

%Vor%     
Gordon Linoff 28.12.2012 17:07
quelle