Wie behebt man den Fehler „Konvertierung fehlgeschlagen beim Konvertieren von Datum und/oder Uhrzeit aus Zeichenfolge“?

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, um die Datumszeichenfolge nach Ihren Bedürfnissen zu formatieren, aber damit die Zeichenfolge von SQL Server interpretiert werden kann und Konvertierungsfehler vermieden werden, sollte sie in einem richtigen 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."

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

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

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

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

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

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. Der globale Standard ISO 8601-Format „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. So wird das Datum „8. März 2018“ im internationalen ISO-Format als „2018-03-08“ geschrieben. 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] aus.

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.

Facebook Twitter Google Plus Pinterest