Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Erreur de conversion lors de la conversion de 'nvarchar' en 'datetime' dans le serveur sql

De nombreux formats sont pris en charge par SQL Server - consultez la MSDN Books Online sur CAST et CONVERT . La plupart de ces formats sont dépendants sur quels paramètres vous avez - par conséquent, ces paramètres peuvent fonctionner parfois - et parfois non.

La façon de résoudre ce problème est d'utiliser le format de date ISO-8601 (légèrement adapté) qui est pris en charge par SQL Server - ce format fonctionne toujours - quels que soient vos paramètres de langue et de format de date SQL Server.

Le format ISO-8601 est pris en charge par SQL Server et se décline en deux versions :

  • YYYYMMDD pour les dates uniquement (pas de partie horaire) ; notez ici :pas de tirets ! , c'est très important ! YYYY-MM-DD n'est PAS indépendant des paramètres de format de date de votre serveur SQL et ne sera PAS fonctionne dans toutes les situations !

ou :

  • YYYY-MM-DDTHH:MM:SS pour les dates et les heures - notez ici :ce format a tirets (mais ils peuvent être omis), et un T fixe comme délimiteur entre la partie date et heure de votre DATETIME .

Ceci est valable pour SQL Server 2000 et plus récent.

Si vous utilisez SQL Server 2008 ou une version plus récente et la DATE type de données (uniquement DATE - pas DATETIME !), alors vous pouvez en effet aussi utiliser le YYYY-MM-DD format et cela fonctionnera également avec tous les paramètres de votre serveur SQL.

Ne me demandez pas pourquoi tout ce sujet est si délicat et quelque peu déroutant - c'est comme ça. Mais avec le YYYYMMDD format, vous devriez être bien pour n'importe quelle version de SQL Server et pour n'importe quel paramètre de langue et de format de date dans votre SQL Server.

La recommandation pour SQL Server 2008 et plus récent est d'utiliser DATE si vous n'avez besoin que de la partie date, et DATETIME2(n) lorsque vous avez besoin à la fois de la date et de l'heure. Vous devriez essayer de commencer à supprimer progressivement le DATETIME type de données si possible