Wie kann der Fehler “Konvertierung beim Konvertieren von Datum und / oder Uhrzeit aus Zeichenfolge fehlgeschlagen” behoben werden?
Der oben erwähnte Fehler tritt normalerweise auf, wenn das Datumsliteral nicht korrekt ist und nicht aus der Zeichenfolge in DateTime oder Datum konvertiert werden kann. Dieser Fehler tritt aus einer Reihe von Gründen auf, die wir zusammen mit dem Lösungssatz ausführlich erörtern werden.
Beispiel 1:
Vereinigtes Königreich Die Datums- und Uhrzeitnotation zeigt das Datum im Tag-Monat-Jahr-Format (10. Januar 2015 oder 01.10.2015) an, das mit der in SQL Server integrierten Funktion “Konvertieren” mit dem Formatierungsstil 103 erreicht werden kann.
Hier im folgenden Beispiel können wir sehen, dass die angegebene Datumszeichenfolge das falsche Format hat. Zuerst wird der Monat, dann die Tage und das letzte Jahr angegeben, was falsch ist und von SQL Server nicht interpretiert werden kann, was zu einem Fehler führt. Das richtige Format für die Datumskonvertierung im britischen Stil mit dem Datumsstil „103“ ist „TT / MM / JJJJ“.
Falsches Format:
Declare @date_time_value varchar(100)= '10/16/2015 21:02:04' select CONVERT(datetime2, @date_time_value, 103) as UK_Date_Time_Style
Richtiges Format:
Das britische und französische Datumsformat ist 103 = “TT / MM / JJJJ” oder 3 = “TT / MM / JJ”. Hier sind 103 und 3 Datumsstile.
Declare @date_time_value varchar(100)= '10/1/15 21:02:04' select CONVERT(datetime2, @date_time_value, 103) as Date_Time_Style
Declare @date_time_value varchar(100)= '10/1/15 21:02:04' select CONVERT(datetime2, @date_time_value, 3) as UK_Date_Time_Style
Beispiel 2:
Manchmal führt die Konvertierung von Zeichenfolgen in Datumsangaben in SQL Server zu Fehlern, nicht aufgrund der verwendeten Datums- oder Zeitformate, sondern weil Sie versuchen, falsche Informationen zu speichern, die für das Schema nicht akzeptabel sind.
Falsches Datum:
Der Grund für den folgenden Fehler ist lediglich, dass es im Jahr 2019 kein Datum wie den „29. Februar“ gibt, da es sich nicht um ein Schaltjahr handelt.
Declare @date_time_value varchar(100)= '2019-02-29 21:02:04' select cast(@date_time_value as datetime2) as date_time_value
Richtig:
Declare @date_time_value varchar(100)= '2019-02-28 21:02:04' select cast(@date_time_value as datetime2) as date_time_value
ISO 8601 Datumsformat:
Obwohl zahlreiche Formate zum Bearbeiten von Datumswerten verfügbar sind, kann es bei der Arbeit für eine globale / internationale Masse ein Usability-Problem sein, eine Datums- / Uhrzeitdarstellung auszuwählen. Daher sollten kulturspezifische Datums- / Zeitliterale vermieden werden. Wenn wir dieses Datum als „03/08/2018“ betrachten, wird es in verschiedenen Regionen der Welt auf unterschiedliche Weise interpretiert.
- Im britischen Stil wird es als „8. März 2018“ interpretiert.
- Im europäischen Stil wird es als „3. August 2018“ interpretiert.
Glücklicherweise gibt es eine Alternative im von ISO entwickelten internationalen Datumsformat. Die globale Norm ISO 8601 „JJJJ-MM-TTThh: mm: ss“ ist eine sprachunabhängigere Option für Zeichenfolgenliterale und behebt all diese Probleme. Während “JJJJ” das Jahr ist, ist “MM” der Monat und “TT” der Tag. Das Datum „8. März 2018“ im internationalen ISO-Format lautet also „2018-03-08“. Daher ist das ISO-Format die beste Wahl für die Datumsdarstellung.
Declare @date_time_value varchar(100)= '2019-03-28 21:02:04' select convert(datetime2,@date_time_value,126) as [yyyy-mm-ddThh:mi:ss.mmm]
Empfehlungen:
Hoffentlich hilft dieser Artikel dabei, die Verwirrung zu lindern, die ich in der Community häufig über Datums- / Zeitwerte gesehen habe. Es wird jedoch empfohlen, Datumsangaben niemals im Texttyp (varchar, char, nvarchar, nchar oder text) zu speichern. Speichern Sie den Datumswert immer in Spalten vom Typ DATE, DATETIME und vorzugsweise DATETIME2 (bietet mehr Genauigkeit) und lassen Sie die Formatierung der Datumsinformationen auf die Benutzeroberflächenebene, anstatt aus der Datenbank abgerufen zu werden.