Se ricevi un messaggio di errore SQL Server 241 che dice Conversione non riuscita durante la conversione di data e/o ora dalla stringa di caratteri , probabilmente è perché stai cercando di convertire una stringa in un valore di data/ora, ma quella particolare stringa non può essere convertita in un valore di data/ora.
Esempio di errore
Ecco un esempio di codice che produce l'errore:
SELECT CAST('Tomorrow' AS date);
Risultato:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
Qui, abbiamo provato a convertire la stringa Tomorrow
alla date
digita, ma Tomorrow
non è una data valida che può essere convertita in una date
digitare.
SQL Server non può convertire la stringa in una date
e quindi ha restituito un errore.
Soluzione 1
Il modo più ovvio per risolvere questo problema è modificare la stringa in modo che assomigli a una data effettiva.
Se stai passando una colonna, controlla di avere la colonna giusta. Lo stesso se stai passando una variabile:controlla che sia la variabile giusta.
Ad esempio, la seguente conversione ha esito positivo:
SELECT CAST('20 Feb 2030' AS date);
Risultato:
2030-02-20
A seconda del formato della data di input, potresti fare meglio a usare CONVERT()
funzione, in modo da poter specificare il formato dell'espressione della data di input.
Esempio:
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';
Risultato:
+-------------------+----------------------+------------------------+----------------------+ | US with century | US without century | British with century | US without century | |-------------------+----------------------+------------------------+----------------------| | 2030-03-02 | 2030-03-02 | 2030-02-03 | 2030-02-03 | +-------------------+----------------------+------------------------+----------------------+
Soluzione 2
Un altro modo per gestire l'errore è utilizzare TRY_CAST()
o TRY_CONVERT()
. Queste funzioni restituiscono NULL
invece dell'errore.
Esempio:
SELECT TRY_CAST('Tomorrow' AS date);
Risultato:
NULL
Tuttavia, questo non risolve necessariamente il problema di fondo, lo nasconde semplicemente. La conversione non è ancora riuscita.
In ogni caso, potrebbe essere ancora un'opzione praticabile, a seconda delle tue esigenze.
Soluzione 3
Un altro modo per gestire l'errore consiste nel convertire la stringa in un tipo di dati diverso. Ovviamente, questo non va bene se vuoi finire con una date
digita, ma forse l'errore si è verificato perché hai specificato accidentalmente date
digita invece dell'altro tipo.
Esempio:
SELECT CAST('Wednesday' AS char(3));
Risultato:
Wed