2009-11-18 28 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 0時01分01秒,11

2009-06026 0時01分02秒,12

任何幫助獲取這個查詢的時間戳會很有幫助。我想不必手動輸入任何日期範圍,因爲此查詢將搜索多年的日誌記錄,並且我不希望爲BETWEEN類型查詢輸入365日期範圍。

+0

要像T-SQL或正常顯示代碼C#或VB.NET,請突出顯示有問題的線路,然後使用「代碼」按鈕(010 101)或在鍵盤上按Ctrl-K。這將很好地格式化代碼並提供語法高亮顯示。 – 2009-11-18 14:50:38

+0

謝謝marc_s。我會確保下次使用。 – InsertOldUserIDHere 2009-11-19 22:09:06

回答

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 – 2009-11-18 15:19:25

+0

非常真實。如果這將是一個巨大的表/結果集,你會想嘗試一些不同的 – 2009-11-18 15:24:25

+0

這很好。在這個表格中有很多我正在尋找的信息,但它在20-30K範圍內,而且速度非常快。 非常感謝 – InsertOldUserIDHere 2009-11-19 22:08:10

0

試試這個:

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

與列名替換GETDATE()。

您也想看看這個以前StackOverflow question,也該previous question

+0

這一個給了我需要的日期,但我仍然有問題讓計數正確。不過,我一直在考慮這一點,並認爲我可以在其他地方使用它。 謝謝 – InsertOldUserIDHere 2009-11-19 21:52:14