Wie kann der Fehler “Konvertierung beim Konvertieren von Datum und / oder Uhrzeit aus Zeichenfolge fehlgeschlagen” behoben werden?

Es gibt viele Fälle, in denen Datum und Uhrzeit nicht in dem gewünschten Format angezeigt werden und eine Abfrageausgabe nicht den Anforderungen der Betrachter entspricht. Es gibt mehrere integrierte Funktionen von SQL Server, mit denen Sie die Datumszeichenfolge entsprechend Ihren Anforderungen formatieren können. Damit die Zeichenfolge jedoch von SQL Server interpretiert wird und Konvertierungsfehler vermieden werden, sollte sie in einem geeigneten Format vorliegen. Wenn wir versuchen, Datum oder Uhrzeit aus der Zeichenfolge zu konvertieren, tritt manchmal der folgende Fehler auf. “Die Konvertierung ist beim Konvertieren von Datum und / oder Uhrzeit aus der Zeichenfolge fehlgeschlagen.”

Datum Uhrzeit Konvertierungsfehler
Abbildung 1: Konvertierungsfehler von Datum und / oder Uhrzeit aus der Zeichenfolge

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
Abbildung 2: Falsches Datumsformat führt zu einem Fehler

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
Abbildung 3: Korrektes Datumsformat mit britischem / französischem Datumsstil „TT / MM / JJJJ“
Declare @date_time_value varchar(100)= '10/1/15 21:02:04'
select CONVERT(datetime2, @date_time_value, 3) as UK_Date_Time_Style
Abbildung 4: Korrektes Datumsformat mit britischem / französischem Datumsstil „TT / MM / JJ“

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
Abbildung 5: Der als 2019 gemeldete Fehler ist kein Schaltjahr, daher hat er kein Datum für den 29. Februar

Richtig:

Declare @date_time_value varchar(100)= '2019-02-28 21:02:04'
select cast(@date_time_value as datetime2) as date_time_value
Abbildung 6: Richtiges Datum

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]
Abbildung 7: Datumsformat der internationalen Norm ISO 8601

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.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *