Si vous obtenez l'erreur SQL Server Msg 241 indiquant La conversion a échoué lors de la conversion de la date et/ou de l'heure à partir d'une chaîne de caractères , c'est probablement parce que vous essayez de convertir une chaîne en une valeur de date/heure, mais cette chaîne particulière ne peut pas être convertie en une valeur de date/heure.
Exemple d'erreur
Voici un exemple de code qui génère l'erreur :
SELECT CAST('Tomorrow' AS date);
Résultat :
Msg 241, Niveau 16, État 1, Ligne 1La conversion a échoué lors de la conversion de la date et/ou de l'heure à partir d'une chaîne de caractères.
Ici, nous avons essayé de convertir la chaîne Tomorrow
à la date
tapez, mais Tomorrow
n'est pas une date valide qui peut être convertie en une date
saisir.
SQL Server ne peut pas convertir la chaîne en une date
et donc il a renvoyé une erreur.
Solution 1
Le moyen le plus évident de résoudre ce problème consiste à modifier la chaîne pour qu'elle ressemble à une date réelle.
Si vous dépassez une colonne, vérifiez que vous avez la bonne colonne. Idem si vous transmettez une variable - vérifiez qu'il s'agit de la bonne variable.
Par exemple, la conversion suivante réussit :
SELECT CAST('20 Feb 2030' AS date);
Résultat :
2030-02-20
Selon le format de la date d'entrée, vous feriez peut-être mieux d'utiliser le CONVERT()
fonction, afin que vous puissiez spécifier le format de l'expression de date d'entrée.
Exemple :
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';
Résultat :
+-------------------+----------------------+--- ---------------------+----------------------+| États-Unis avec siècle | États-Unis sans siècle | Britannique avec siècle | US sans siècle ||-------------------+----------------------+-- ----------------------+---------------------|| 2030-03-02 | 2030-03-02 | 2030-02-03 | 2030-02-03 |+--------------+--------------------------+ ------------------------+----------------------+Solution 2
Une autre façon de gérer l'erreur consiste à utiliser soit
TRY_CAST()
ouTRY_CONVERT()
. Ces fonctions renvoientNULL
au lieu de l'erreur.Exemple :
SELECT TRY_CAST('Tomorrow' AS date);
Résultat :
NULLCela ne résout pas nécessairement le problème sous-jacent, cela le cache simplement. La conversion n'a toujours pas pu avoir lieu.
Dans tous les cas, cela peut toujours être une option viable, selon vos besoins.
Solution 3
Une autre façon de gérer l'erreur consiste à convertir la chaîne en un type de données différent. Évidemment, ce n'est pas bon si vous voulez vous retrouver avec une
date
type, mais peut-être que l'erreur est survenue parce que vous avez accidentellement spécifiédate
type au lieu de l'autre type.Exemple :
SELECT CAST('Wednesday' AS char(3));
Résultat :
Mer