Hvis du får SQL Server-fejlmeddelelse 241, der lyder Konvertering mislykkedes ved konvertering af dato og/eller tid fra tegnstreng , er det sandsynligvis, fordi du forsøger at konvertere en streng til en dato/tidsværdi, men den pågældende streng kan ikke konverteres til en dato/tidsværdi.
Eksempel på fejl
Her er et eksempel på kode, der producerer fejlen:
SELECT CAST('Tomorrow' AS date);
Resultat:
Besked 241, niveau 16, tilstand 1, linje 1 Konvertering mislykkedes ved konvertering af dato og/eller tid fra tegnstreng.
Her forsøgte vi at konvertere strengen Tomorrow
til date
type, men Tomorrow
er ikke en gyldig dato, der kan konverteres til en date
type.
SQL Server kan ikke konvertere strengen til en date
og så det returnerede en fejl.
Løsning 1
Den mest oplagte måde at løse dette på er at ændre strengen, så den ligner en faktisk dato.
Hvis du passerer en kolonne, skal du kontrollere, at du har den rigtige kolonne. Det samme, hvis du sender en variabel - tjek, at det er den rigtige variabel.
For eksempel lykkes følgende konvertering:
SELECT CAST('20 Feb 2030' AS date);
Resultat:
2030-02-20
Afhængigt af formatet på inputdatoen, er du måske bedre stillet ved at bruge CONVERT()
funktion, så du kan angive formatet for inputdatoudtrykket.
Eksempel:
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 århundrede | USA uden århundrede | Britisk med århundrede | USA uden århundrede ||--------------------+----------------------+-- ----------------------+---------------------|| 2030-03-02 | 2030-03-02 | 03-02-2030 | 2030-02-03 |+-------------------+---------------------------+ --------------------+------------------------------+Løsning 2
En anden måde at håndtere fejlen på er at bruge enten
TRY_CAST()
ellerTRY_CONVERT()
. Disse funktioner returnererNULL
i stedet for fejlen.Eksempel:
SELECT TRY_CAST('Tomorrow' AS date);
Resultat:
NULLDette løser dog ikke nødvendigvis det underliggende problem, det skjuler det blot. Konverteringen kunne stadig ikke finde sted.
Under alle omstændigheder kan det stadig være en levedygtig mulighed, afhængigt af dine behov.
Løsning 3
En anden måde at håndtere fejlen på er at konvertere strengen til en anden datatype. Det er naturligvis ikke godt, hvis du vil ende med en
date
type, men måske er fejlen opstået, fordi du ved et uheld har angivetdate
type i stedet for den anden type.Eksempel:
SELECT CAST('Wednesday' AS char(3));
Resultat:
ons