Wenn Sie die SQL Server-Fehlermeldung 241 erhalten, die lautet:Konvertierung fehlgeschlagen beim Konvertieren von Datum und/oder Uhrzeit aus einer Zeichenfolge , liegt es wahrscheinlich daran, dass Sie versuchen, eine Zeichenfolge in einen Datums-/Uhrzeitwert zu konvertieren, aber diese bestimmte Zeichenfolge kann nicht in einen Datums-/Uhrzeitwert konvertiert werden.
Fehlerbeispiel
Hier ist ein Codebeispiel, das den Fehler erzeugt:
SELECT CAST('Tomorrow' AS date);
Ergebnis:
Msg 241, Level 16, State 1, Line 1Conversion schlug beim Konvertieren von Datum und/oder Uhrzeit aus einer Zeichenkette fehl.
Hier haben wir versucht, den String Tomorrow
umzuwandeln bis zum date
Typ, sondern Tomorrow
ist kein gültiges Datum, das in ein date
konvertiert werden kann Typ.
SQL Server kann die Zeichenfolge nicht in ein date
konvertieren und so wurde ein Fehler zurückgegeben.
Lösung 1
Der naheliegendste Weg, dies zu beheben, besteht darin, die Zeichenfolge so zu ändern, dass sie einem tatsächlichen Datum ähnelt.
Wenn Sie an einer Säule vorbeifahren, überprüfen Sie, ob Sie die richtige Säule haben. Gleiches gilt, wenn Sie eine Variable übergeben – prüfen Sie, ob es die richtige Variable ist.
Die folgende Konvertierung ist beispielsweise erfolgreich:
SELECT CAST('20 Feb 2030' AS date);
Ergebnis:
2030-02-20
Abhängig vom Format des Eingabedatums ist es möglicherweise besser, CONVERT()
zu verwenden Funktion, sodass Sie das Format des Eingabedatumsausdrucks angeben können.
Beispiel:
SELECT
CONVERT(date, '03/02/2030', 101) AS 'US with century',
CONVERT(date, '03/02/30', 1) AS 'US without century',
CONVERT(date, '03/02/2030', 103) AS 'British with century',
CONVERT(date, '03/02/30', 3) AS 'US without century';
Ergebnis:
+--------------+---------------------+--- ---------------------+----------------------+| USA mit Jahrhundert | USA ohne Jahrhundert | Britisch mit Jahrhundert | USA ohne Jahrhundert ||------+---------------------+-- ----------------------+----------------------|| 2030-03-02 | 2030-03-02 | 2030-02-03 | 03.02.2030 |+--------------+---------------------+ ------------------------+----------------------+Lösung 2
Eine andere Möglichkeit, mit dem Fehler umzugehen, besteht darin, entweder
TRY_CAST()
zu verwenden oderTRY_CONVERT()
. Diese Funktionen gebenNULL
zurück anstelle des Fehlers.Beispiel:
SELECT TRY_CAST('Tomorrow' AS date);
Ergebnis:
NULLDies behebt jedoch nicht unbedingt das zugrunde liegende Problem, sondern verbirgt es lediglich. Die Konvertierung konnte immer noch nicht durchgeführt werden.
In jedem Fall kann dies je nach Ihren Anforderungen immer noch eine praktikable Option sein.
Lösung 3
Eine andere Möglichkeit, mit dem Fehler umzugehen, besteht darin, die Zeichenfolge in einen anderen Datentyp zu konvertieren. Offensichtlich ist das nicht gut, wenn Sie mit einem
date
enden möchten type, aber vielleicht kam der Fehler daher, weil Sie versehentlichdate
angegeben haben Typ anstelle des anderen Typs.Beispiel:
SELECT CAST('Wednesday' AS char(3));
Ergebnis:
Mi