Om du får SQL Server-felmeddelande 241 som lyder Konverteringen misslyckades vid konvertering av datum och/eller tid från teckensträng , det beror förmodligen på att du försöker konvertera en sträng till ett datum-/tidsvärde, men just den strängen kan inte konverteras till ett datum-/tidsvärde.
Exempel på fel
Här är ett exempel på kod som ger felet:
SELECT CAST('Tomorrow' AS date);
Resultat:
Msg 241, Level 16, State 1, Line 1Conversion misslyckades vid konvertering av datum och/eller tid från teckensträng.
Här försökte vi konvertera strängen Tomorrow
till date
typ, men Tomorrow
är inte ett giltigt datum som kan konverteras till ett date
typ.
SQL Server kan inte konvertera strängen till ett date
och så det returnerade ett fel.
Lösning 1
Det mest uppenbara sättet att fixa detta är att ändra strängen så att den liknar ett verkligt datum.
Om du klarar en kolumn, kontrollera att du har rätt kolumn. Samma sak om du skickar en variabel – kontrollera att det är rätt variabel.
Till exempel lyckas följande konvertering:
SELECT CAST('20 Feb 2030' AS date);
Resultat:
2030-02-20
Beroende på formatet för inmatningsdatumet kan det vara bättre att använda CONVERT()
funktion, så att du kan ange formatet för inmatningsdatumuttrycket.
Exempel:
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';
Resultat:
+--------------------+---------------------+--- --------------------+-----------------------------+| USA med århundrade | USA utan århundrade | Brittisk med århundrade | USA utan århundrade ||------------------------+----------------------------+-- ----------------------+----------------------------|| 2030-03-02 | 2030-03-02 | 2030-02-03 | 2030-02-03 |+--------------------+---------------------------+ ------------------------+------------------------------+Lösning 2
Ett annat sätt att hantera felet är att använda antingen
TRY_CAST()
ellerTRY_CONVERT()
. Dessa funktioner returnerarNULL
istället för felet.Exempel:
SELECT TRY_CAST('Tomorrow' AS date);
Resultat:
NULLDetta löser dock inte nödvändigtvis det underliggande problemet, det döljer det bara. Konverteringen kunde fortfarande inte ske.
I vilket fall som helst kan det fortfarande vara ett genomförbart alternativ, beroende på dina behov.
Lösning 3
Ett annat sätt att hantera felet är att konvertera strängen till en annan datatyp. Uppenbarligen är detta inte bra om du vill sluta med ett
date
typ, men felet kanske uppstod för att du av misstag angavdate
typ istället för den andra typen.Exempel:
SELECT CAST('Wednesday' AS char(3));
Resultat:
ons