2009-04-23 7 views
2

HI,aaaa-mm-jj hh: mm: ss dans SQL Server pour devenir aaaa-mm-jj en C#

Cela pourrait être une question fréquente.

J'ai une colonne de date (InvDate) dans la base de données SQL Server 2005, qui a une valeur comme 2009-04-23 00: 00: 00.000. Je vais chercher ceci dans un Dataset. Maintenant, je dois stocker seulement 2009-04-23 dans une feuille Excel de sortie (j'utilise OleDB). Je ne veux pas l'heure, même si c'est juste 00: 00: 00.000.

J'ai essayé CONVERT (varchar (11), InvDate, 101) et Parse.ToDateExact, et Convert.ToDate.

Je ne suis pas capable d'obtenir les bonnes mesures.

Des idées?

Merci.

+0

si (connection.DataSource.EndsWith ("mdb")) { Command.CommandText = "Format SELECT ([InvDate], 'aaaa-mm-dd') AS InvDate DE Foo"; } else { command.CommandText = "SELECT remplacer (convertir (varchar (11), [InvDate], 102), '.', '-') AS InvDate FROM Foo"; } Je pense que cela fonctionne également. – Chakra

Répondre

2

DateTime.Date est votre réponse, elle extrait la partie date de l'objet, à savoir le temps = 00: 00: 00,000

 DateTime date = DateTime.Now; 
     Console.WriteLine("Date is " + date.Date); 
2

Si vous avez par exemple membre DateTime alors vous pouvez appeler la méthode « ToShortDate() " fonction.

+0

ToShortDate() utilise les informations de culture du thread en cours. DateThing.toString ("aaaa-MM-jj") renvoie toujours le format désiré – edosoft

0

Si votre jeu de données a un DateTime, il tiendra également 2009-04-23 00: 00: 00.000. Vous pouvez formater cet objet dans votre code de sortie:

date.ToString ("aaaa-MM-jj");

3

Si vous avez les données sous forme de chaîne:

DateTime.Parse (yourDataAsAString) .ToString ("yyyy-MM-dd")

4

Si vous écrivez votre date à Excel:

Excel.Worksheet worksheet; 
... 
worksheet.Cells(row, column).Value = dateVar.Date; // returns the date part of dateVar 
worksheet.Cells(row, column).NumberFormat = @"yyyy-mm-dd"; 
+0

Patrick a raison. Ceci est un problème de mise en forme sur la feuille de calcul Excel, pas un problème avec votre variable DateTime en C#. Vous avez déjà indiqué qu'il est stocké sans composant de temps dans la base de données. –

0

Dans votre requête SQL, vous pouvez simplement spécifier que vous ne voulez pas la partie du temps de la valeur heure/date en utilisant cette syntaxe:

SELECT DATE(timedatecolumn) WHERE whatever = whatever 

Si vous voulez vraiment vous faire plaisir, vous pouvez utiliser DATE_FORMAT et le sortir comme bon vous semble. Par exemple:

SELECT DATE_FORMAT(timedatecolumn, '%W, %M %D, %Y') WHERE blah = blah 

serait sortie (si la date était aujourd'hui):

Thursday, April 23rd, 2009 

Les différentes options pour les formats de date (MySQL) sont à:

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-format

également , gardez à l'esprit que la valeur de date dans Excel (si elle est formatée comme une date réelle, pas seulement comme une chaîne) n'est pas réellement ce que vous voyez dans la cellule. Il s'agit de la valeur de date de Microsoft (essentiellement un nombre entier qui correspond à une date et une heure dans la logique Microsoft). Par conséquent, si vous souhaitez qu'Excel reconnaisse et traite la valeur comme une date (par exemple, les valeurs qui sont plus anciennes ou sur un mois spécifique, etc.) vous avez juste besoin de formater la colonne pour ne pas montrer la partie de temps de la valeur.

Si vous voulez perdre le temps parce que vous ne voulez pas les événements qui sont marqués comme passe une heure plus tard à traiter différemment, il vous suffit d'arrondir la valeur vers le bas en utilisant la fonction SOL:

FLOOR(somedatecell, 1) 

Étant donné que la partie temps de la valeur est toujours une décimale suivant la partie date de la valeur, elle sera arrondie à partir de, disons 39926.2725925926 (aujourd'hui à 6:32:32 AM) à seulement 39926 (aujourd'hui à minuit).

Vous devez encore formater la cellule pour se débarrasser de la partie temps, mais maintenant toutes les dates qui sont égales sont en réalité égales, et non désactivées par des heures ou des minutes.

Cependant, si vous voulez simplement la date comme une chaîne, vous devrez convertir le datevalue en texte en utilisant la fonction TEXTE:

TEXT(somedatecell,"mm/dd/yyyy") 

Si vous voulez être super-anal (comme moi, mais ce n'est pas nécessaire), vous pouvez arrondir la valeur de date jusqu'à minuit d'abord, puis le convertir en texte en utilisant cette formule:

TEXT(FLOOR(somedatecell, 1), "mm/dd/yyyy") 

Excel ne fond que pour vous quand vous dites que vous voulez formater le texte en utilisant la format de date, mais juste au cas où vous aimez les choses plus soignées, vous pouvez arrondir premier

0

Utilisez String.Format pour mettre en forme la date comme vous le souhaitez ou DateTime.ToString.

Pour gérer cela dans le SQL est juste plus lourd que nécessaire. Convertir dans votre code C# avant de gérer la représentation sous forme de chaîne de la valeur DateTime sur Excel. Ou, si vous êtes aventureux, vous pouvez donner à Excel la valeur DateTime, puis ajouter un format dans la cellule Excel pour afficher correctement la valeur. Ce serait l'approche la plus correcte, car la valeur serait toujours une date, également pour Excel.