Comment corriger l'erreur 'La conversion a échoué lors de la conversion de la date et / ou de l'heure à partir d'une chaîne de caractères'?



Essayez Notre Instrument Pour Éliminer Les Problèmes

Il existe de nombreux cas où les dates et les heures n'apparaissent pas dans le format souhaité, et la sortie d'une requête ne répond pas aux besoins des utilisateurs. Il existe plusieurs fonctionnalités intégrées de SQL Server pour formater la chaîne de date en fonction de vos besoins, mais pour que la chaîne soit interprétée par SQL Server et pour éviter les erreurs de conversion, elle doit être dans un format approprié. Lorsque nous essayons de convertir la date ou l'heure à partir d'une chaîne de caractères, une erreur de suivi se produit parfois. 'La conversion a échoué lors de la conversion de la date et / ou de l'heure à partir de la chaîne de caractères.'



erreur de conversion date / heure

Figure 1: Erreur de conversion de date et / ou d'heure à partir de la chaîne de caractères



L'erreur mentionnée ci-dessus se produit normalement lorsque le littéral de date n'est pas correct et ne peut pas être converti de la chaîne en DateTime ou date. Cette erreur est due à un certain nombre de raisons, que nous discuterons en détail avec l'ensemble de solutions.



Exemple 1:

Royaume-Uni La notation de date et d'heure affiche la date au format jour-mois-année (10 janvier 2015 ou 01/10/2015) que nous pouvons obtenir en utilisant la fonction intégrée de SQL Server «convertir» avec le style de formatage 103.

Ici, dans l'exemple ci-dessous, nous pouvons voir que la chaîne de date fournie est dans le mauvais format. Tout d'abord, il fournit le mois, puis les jours et l'année dernière, ce qui est erroné et ne peut pas être interprété par SQL Server, ce qui entraîne une erreur. Le format correct pour la conversion de date de style britannique en utilisant le style de date «103» est «jj / mm / aaaa».

Mauvais format:

Déclarez @date_time_value varchar (100) = '10 / 16/2015 21:02:04 'sélectionnez CONVERT (datetime2, @date_time_value, 103) comme UK_Date_Time_Style

Figure 2: Format de date incorrect entraînant une erreur



Format correct:

Le format de date britannique et français est 103 = «jj / mm / aaaa» ou 3 = «jj / mm / aa». Ici, 103 et 3 sont des styles de date.

Declare @date_time_value varchar (100) = '10 / 1/15 21:02:04 'sélectionnez CONVERT (datetime2, @date_time_value, 103) comme Date_Time_Style

Figure 3: Format de date correct avec le style de date anglais / français «jj / mm / aaaa»

Déclarez @date_time_value varchar (100) = '10 / 1/15 21:02:04 'sélectionnez CONVERT (datetime2, @date_time_value, 3) comme UK_Date_Time_Style

Figure 4: Format de date correct avec le style de date anglais / français «jj / mm / aa»

Exemple 2:

Parfois, la conversion de chaîne en date dans le serveur SQL entraîne une erreur, non pas à cause des formats de date ou d’heure utilisés, mais plutôt parce que vous essayez de stocker des informations incorrectes qui ne sont pas acceptables pour le schéma.

Mauvaise date:

La raison de l'erreur suivante est simplement que pour l'année 2019, il n'y a pas de date telle que «29 février» car ce n'est pas une année bissextile.

Declare @date_time_value varchar (100) = '2019-02-29 21:02:04' select cast (@date_time_value as datetime2) as date_time_value

Figure 5: Erreur générée car 2019 n'est pas une année bissextile, elle n'a donc pas le 29 février comme date

Corriger un:

Declare @date_time_value varchar (100) = '2019-02-28 21:02:04' select cast (@date_time_value as datetime2) as date_time_value

Figure 6: Date correcte

Format de date ISO 8601:

Bien que de nombreux formats soient disponibles pour manipuler les valeurs de date, lorsque vous travaillez pour une masse globale / internationale, il peut être un problème d'utilisabilité de choisir une représentation datetime. Ainsi, les littéraux de date / heure spécifiques à la culture doivent être évités. Si nous considérons cette date «03/08/2018», elle sera interprétée de différentes manières dans différentes régions du monde.

  • Dans le style britannique, il est interprété comme «8 mars 2018»
  • Dans le style européen, il est interprété comme «3 août 2018»

Heureusement, il existe une alternative au format de date international développé par l'ISO. Le format standard international ISO 8601 «AAAA-MM-JJThh: mm: ss» est une option plus indépendante de la langue pour les chaînes littérales et il résout tous ces problèmes. Alors que «aaaa» est l'année, «mm» est le mois et «jj» est le jour. Ainsi, la date «8 mars 2018» au format ISO international s'écrit «2018-03-08». Le format ISO est donc le meilleur choix pour la représentation de la date.

Declare @date_time_value varchar (100) = '2019-03-28 21:02:04' select convert (datetime2, @ date_time_value, 126) as [yyyy-mm-ddThh: mi: ss.mmm]

Figure 7: Format de date de la norme internationale ISO 8601

Recommandations:

J'espère que cet article aidera à soulager la confusion que j'ai souvent vue dans la communauté sur les valeurs de date / heure. Cependant, il est recommandé de ne jamais stocker les dates dans des colonnes de type texte (varchar, char, nvarchar, nchar ou text). à la couche d'interface utilisateur au lieu d'être récupérés de la base de données.

2 minutes de lecture