Comment réparer & lsquo; échec de la conversion lors de la conversion de la date et / ou de l'heure à partir d'une chaîne de caractères & rsquo; Erreur?

Il existe de nombreux cas où les dates et heures n'apparaissent pas dans le format souhaité, et le résultat d'une requête ne répond pas aux besoins des spectateurs. 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

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 en utilisant le format jour-mois-année (10 janvier 2015 ou 10/1/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:

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

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
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

Exemple 2:

Parfois, la conversion de chaîne en date dans le serveur SQL entraîne une erreur, 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

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

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. Les littéraux date / heure spécifiques à la culture doivent donc ê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]

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.

Recommandé

Correction: Minecraft ne répond pas
Qu'est-ce que l'application d'enregistrement de périphérique de tuner TV numérique et doit-elle être supprimée?
Qu'est-ce que FileRepMalware et devez-vous le supprimer?