2009-11-18 2 views
3

У меня возникла проблема с выяснением того, что, по моему мнению, было бы простым запросом. У меня есть таблица с двумя полями (EntryDateTime, Message), которая, как вы можете догадаться, регистрирует конкретные сообщения с отметкой даты даты для приложения мониторинга.Игнорирование отметки времени для счета в SQL Server 2005

Я ищу, чтобы получить количество всех сообщений типа в день, но часть времени штампа (при необходимости для всего остального), давая мне проблемы здесь.

Я искал что-то сделать, как,

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

То, что я ищу, как выход что-то вроде

2009-06-26, 142

2009-06 -27, 259

2009-06-28, 57

Конечно, это дает мне выход сообщений больше как

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

2009-06026 00:01:02, 12

Любая помощь, связанная с получением метки времени для этого запроса, будет очень полезна. Мне не нужно вручную вводить диапазоны дат, так как этот запрос будет искать учетную запись в течение нескольких лет, и я бы не хотел вводить 365 диапазонов дат для запроса типа BETWEEN.

+0

Для правильного отображения кода, как T-SQL или C# или VB.NET, пожалуйста, выделите строки, о которых идет речь, а затем использовать «код» (010 101) на панели инструментов редактора или нажмите Ctrl-K на клавиатуре. Это хорошо отформатирует код и обеспечивает подсветку синтаксиса. –

+0

Спасибо marc_s. Я обязательно буду использовать это в следующий раз. – InsertOldUserIDHere

ответ

2

Что об использовании что-то вроде этого:

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

Преобразование в строку - это не самый быстрый метод. http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx –

+0

Очень верно. Если это будет огромный стол/результирующий набор, вы бы хотели попробовать что-то другое. –

+0

Это отлично работало. Есть несколько таких сообщений в этой таблице, которую я ищу, но она находится в диапазоне 20-30K, и это было очень быстро. Спасибо большое – InsertOldUserIDHere

0

Попробуйте это:

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

Заменить GetDate() с Column Name.

Вы также хотите посмотреть на эту предыдущую StackOverflow question, а также это previous question

+0

Это дало мне даты, в которых я нуждался, но у меня все еще были проблемы с правильной подсчету. Тем не менее, я изучал это и думаю, что могу использовать его где-то еще. Спасибо – InsertOldUserIDHere