web-dev-qa-db-fra.com

Les champs DateTime de SQL Server ne s'affichent pas correctement dans Excel

De nombreuses fois au cours de la journée, je copie et colle des enregistrements de SQL Server Management Studio vers Excel. 

Mon problème est qu'une valeur DateTime telle que 8/23/2013 4:51:02 PM ne s'affiche pas correctement, comme indiqué dans l'image ci-dessous, même si elle s'affiche correctement dans la zone de fonction. 

enter image description here

Le fait de changer le type de données en ShortDate corrige les problèmes d’affichage, mais cela est fastidieux à faire car j’ai beaucoup de champs de date à formater. Étant donné qu'Excel et SQL Server sont deux produits Microsoft, on pourrait s'attendre à ce qu'Excel puisse afficher correctement le champ de date.

EDIT: Cela semble donc être un problème d'affichage avec Excel. J'ai copié mes résultats Management Studio dans le Bloc-notes, puis dans Excel et le même problème persiste… .. Copier 2013-08-23 16:52:11.493 du Bloc-notes vers Excel affichera 52:11.5 (affichant les minutes, les secondes et les millisecondes arrondies). La version Excel est 2010.

Des idées pour simplifier cela?

48
Andre

J'ai également eu un problème avec ce problème, simplement copier-coller des champs DATETIME de SQL Management Studio vers Excel pour les manipuler. Excel a la valeur correcte de DATETIME (même si le formatage est appliqué après le collage), mais par défaut, il n’a pas de format intégré pour afficher le DATETIME SQL. Voici le correctif:

Cliquez avec le bouton droit de la souris sur la cellule et choisissez Format Cells. Choisissez Personnalisé. Dans le champ de saisie Type: entrez

yyyy-mm-dd hh:mm:ss.000

Référence: http://office.Microsoft.com/en-us/Excel-help/create-a-custom-number-format-HP010342372.aspx

72
user2688162

J'ai eu le même problème qu'André. Il ne semble pas y avoir de solution directe, mais un CAST dans la requête qui génère les données corrige le problème tant que vous pouvez respecter les restrictions de SMALLDATETIME. Dans la requête suivante, la première colonne ne met pas en forme correctement dans Excel, la seconde le fait.

SÉLECTIONNER GETDATE (), CAST (GETDATE () AS SMALLDATETIME)

Peut-être que la fraction des secondes dans DATETIME et DATETIME2 confond Excel.

10
dbuskirk

Bien que la réponse à votre question ne soit pas complète, il existe des raccourcis clavier dans Excel pour modifier le formatage des cellules sélectionnées en date ou en heure (malheureusement, je n’en ai trouvé aucune pour Date + Heure).

Donc, si vous cherchez seulement des dates, vous pouvez effectuer les opérations suivantes:

  1. Plage de copie à partir de SQL Server Management Studio
  2. Coller dans Excel
  3. Sélectionnez la plage de cellules dont vous avez besoin comme format de date.
  4. Appuyez sur Ctrl + Shift + 3

Pour formater en tant que fois, utilisez Ctrl + Shift + 2.

Vous pouvez l'utiliser dans SQL SERVER 

SELECT CONVERT (nvarchar (19), ColumnName, 121) AS [Changed On] FROM Table

3
glancep

Vous avez trouvé une solution qui ne nécessite pas de mémoriser et de retaper le format de date/heure personnalisé yyyy-mm-dd hh:mm:ss.000 

  • Dans une nouvelle cellule, écrivez soit =NOW(), soit n’importe quelle date + heure valide telle que 5/30/2017 17:35: elle s’affichera correctement dans votre langue, par exemple. 5/30/2017 5:35:00 PM
  • Sélectionnez la cellule, cliquez sur l'icône Format Painter (le pinceau)
  • Cliquez maintenant sur l'en-tête de ligne de la colonne à laquelle vous souhaitez appliquer le format. 

Cela copiera un format de date et heure correct dans toute la colonne, ce qui l'affichera correctement.

3
Gerardo Grignoli

C'est un très vieux message, mais j'ai récemment rencontré le problème et pour moi, le problème suivant a été résolu en formatant le code SQL comme suit 

SELECT CONVERT (varchar, getdate (), 120) AS Date

Si vous copiez le résultat à partir de SQL Server et que vous le collez dans Excel, Excel conserve le formatage approprié. 

2
MohammedS

Je sais qu'il est trop tard pour répondre à cette question. Mais, je pensais qu'il serait toujours agréable de partager comment j'ai réglé ce problème quand j'avais le même problème. Voici ce que j'ai fait.

  • Avant de copier les données, sélectionnez la colonne dans Excel, sélectionnez "Format des cellules", choisissez "Texte", puis cliquez sur "OK" (ainsi, si vos données SQL ont la 3ème colonne comme DateTime, appliquez cette mise en forme à la 3ème colonne dans Excel )  Step 1
  • Maintenant, copiez et collez les données de SQL vers Excel pour obtenir la valeur datetime au format correct .  Step 2
2
user1918553

Voici un hack qui pourrait être utile ... il met une apostrophe devant la valeur temporelle, donc lorsque vous cliquez avec le bouton droit sur la sortie dans SSMS et que vous dites "Copier avec en-têtes", puis que vous le collez dans Excel, il conserve les millisecondes nanosecondes pour les valeurs datetime2. C’est un peu moche qu’elle place l’apostrophe ici, mais c’est mieux que la frustration de traiter avec Excel en arrondissant de manière non souhaitée la valeur de temps. La date est au format britannique, mais vous pouvez consulter la page de fonction CONVERT dans MSDN.

SELECT CONVERT (VARCHAR (23), sm.MilestoneDate, 103) AS MilestoneDate, '' '' + CONVERT (VARCHAR (23), sm.MilestoneDate, 114) AS MilestoneTime DE SomeTable sm

1
David Barrows

Essayez ce qui suit: Collez "2004-06-01 00: 00: 00.000" dans Excel.

Maintenant, essayez Coller "2004-06-01 00:00:00" dans Excel.

Excel ne semble pas être capable de gérer des millisecondes lors du collage ...

1
jph572

Je rencontre ce même problème depuis quelque temps, alors que je génère un assez grand nombre de rapports ad-hoc à partir de SQL Server et que je les copie/les colle dans Excel ... Je souhaiterais également une solution appropriée, mais ma solution temporaire consistait à macro par défaut dans Excel qui convertit les cellules en surbrillance au format datetime d'Excel et les attribue à un raccourci clavier (Maj-Ctrl-D dans mon cas) . la colonne à convertir et appuyez sur Maj-Ctrl-D. Travail accompli.

0
MarkR