sql >> Database teknologi >  >> RDS >> Sqlserver

Fix Msg 241 "Konvertering mislykkedes ved konvertering af dato og/eller tid fra tegnstreng" i SQL Server

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() eller TRY_CONVERT() . Disse funktioner returnerer NULL i stedet for fejlen.

Eksempel:

SELECT TRY_CAST('Tomorrow' AS date); 

Resultat:

NULL

Dette 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 angivet date type i stedet for den anden type.

Eksempel:

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

Resultat:

ons

  1. Sådan overføres en null-variabel til en SQL Stored Procedure fra C#.net-kode

  2. MariaDB CURRENT_TIME() Forklaret

  3. 3 metoder til at genopbygge alle indekser for alle tabeller med T-SQL i SQL Server-database

  4. Humaniseret eller naturlig nummersortering af blandede ord-og-tal-strenge