Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Behebung von Msg 241 „Konvertierung fehlgeschlagen beim Konvertieren von Datum und/oder Uhrzeit aus einer Zeichenfolge“ in SQL Server

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 oder TRY_CONVERT() . Diese Funktionen geben NULL zurück anstelle des Fehlers.

Beispiel:

SELECT TRY_CAST('Tomorrow' AS date); 

Ergebnis:

NULL

Dies 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 versehentlich date angegeben haben Typ anstelle des anderen Typs.

Beispiel:

SELECT CAST('Wednesday' AS char(3)); 

Ergebnis:

Mi