2009-11-18 4 views
3

Je rencontre un problème pour déterminer ce que je pensais être une requête simple. J'ai une table avec deux champs (EntryDateTime, Message) qui, comme vous pouvez le deviner, enregistre des messages spécifiques avec un horodatage pour une application de surveillance. Je cherche à obtenir un compte de tous les messages d'un type par jour, mais la partie de l'heure du timbre (alors que nécessaire pour tout le reste) me donner des problèmes ici.Ignorer l'horodatage pour un nombre dans SQL Server 2005

que je cherchais à faire quelque chose comme,

SELECT COUNT(Message) 
FROM DBName.dbo.TableName 
WHERE Message = 'LoginFailed' 
GROUP BY EntryDateTime 

Ce que je cherche comme la sortie est quelque chose comme

2009-06-26, 142

2009-06 -27, 259

2009-06-28, 57

Bien sûr, cela me donne une sortie de messages plus comme

2009-06-26 00:01:01, 11

2009-06026 00:01:02, 12

Toute aide pour obtenir l'horodatage de cette requête serait très utile. Je ne voudrais pas avoir à entrer manuellement des plages de dates car cette requête va chercher des années de journalisation et j'aimerais ne pas entrer 365 plages de dates pour une requête de type BETWEEN.

+0

Pour afficher correctement le code comme T-SQL ou C# ou VB.NET, s'il vous plaît mettre en évidence les lignes en question, puis utilisez le « code » Cliquez sur le bouton (010 101) dans la barre d'outils de l'éditeur ou appuyez sur Ctrl-K sur votre clavier. Cela formatera bien le code et fournira la coloration syntaxique. –

+0

Merci marc_s. Je ferai en sorte de l'utiliser la prochaine fois. – InsertOldUserIDHere

Répondre

2

Qu'en est-il d'utiliser quelque chose comme ceci:

SELECT COUNT (Message), CONVERT(DATETIME, CONVERT(CHAR(10), EntryDateTime, 101)) 
FROM DBName.dbo.TableName 
WHERE Message = 'LoginFailed' 
GROUP BY CONVERT(DATETIME, CONVERT(CHAR(10), EntryDateTime, 101)) 
+0

La conversion en chaîne n'est pas la méthode la plus rapide. http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx –

+0

Très vrai. Si cela va être une énorme table/ensemble de résultats, vous voudriez essayer quelque chose de différent –

+0

Cela a fonctionné très bien. Il y a un certain nombre de ces messages dans cette table que je cherche, mais c'est dans la gamme 20-30K et c'était très rapide. Merci beaucoup – InsertOldUserIDHere

0

Essayez ceci:

SELECT DATEADD(dd, DATEDIFF(d, 0, Getdate()), 0) 

Remplacer Getdate() avec votre nom de colonne.

Vous aurez également besoin de regarder ce précédent StackOverflow question et aussi ce previous question

+0

Celui-ci m'a donné les dates dont j'avais besoin mais j'avais encore des problèmes pour obtenir le compte correct. Cependant, j'ai regardé cela et pense que je peux l'utiliser ailleurs. Merci – InsertOldUserIDHere