Wie kann der Fehler 'Konvertierung fehlgeschlagen beim Konvertieren von Datum und / oder Uhrzeit aus Zeichenkette' behoben werden?



Versuchen Sie Unser Instrument, Um Probleme Zu Beseitigen

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 fehlgeschlagen, wenn Datum und / oder Uhrzeit aus der Zeichenfolge konvertiert wurden.'



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 wir mit der in SQL Server integrierten Funktion 'konvertieren' mit Formatierungsstil 103 erreichen können.

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:

Deklarieren Sie @date_time_value varchar (100) = '10 / 16/2015 21:02:04 'und wählen Sie CONVERT (datetime2, @date_time_value, 103) als 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.

Deklarieren Sie @date_time_value varchar (100) = '10 / 1/15 21:02:04 'und wählen Sie CONVERT (datetime2, @date_time_value, 103) als Date_Time_Style

Abbildung 3: Korrektes Datumsformat mit britischem / französischem Datumsstil „TT / MM / JJJJ“

Deklarieren Sie @date_time_value varchar (100) = '10 / 1/15 21:02:04 'und wählen Sie CONVERT (datetime2, @date_time_value, 3) als 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.

Deklarieren Sie @date_time_value varchar (100) = '2019-02-29 21:02:04' und wählen Sie cast (@date_time_value als datetime2) als date_time_value aus

Abbildung 5: Der als 2019 gemeldete Fehler ist kein Schaltjahr, daher hat er kein Datum für den 29. Februar

Richtig:

Deklarieren Sie @date_time_value varchar (100) = '2019-02-28 21:02:04' und wählen Sie cast (@date_time_value als datetime2) als date_time_value aus

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.

Deklarieren Sie @date_time_value varchar (100) = '2019-03-28 21:02:04' und wählen Sie convert (datetime2, @ date_time_value, 126) als [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.

2 Minuten gelesen