[英]T-SQL code to get a DateTime contain only Month and Year from any DateTime
給定一個表Event
其中包含一個名為EventTime
且DateTime類型的字段,並且該值將包含日期和時間元素,我需要創建一個匯總查詢,該查詢計算每個月的事件數。
Group By字段的結果類型也必須是具有0時間元素的Date Time並設置為該月的第1天。
這是我到目前為止,但它不是很優雅,我不確定它特別有效。
SELECT COUNT(1) AS [CountOfEvents],
DATEADD(d, 1 - DAY(EventTime), DATEADD(dd, 0, DATEDIFF(dd, 0, EventTime))) AS [Month]
FROM [Event]
GROUP BY DATEADD(d, 1 - DAY(EventTime), DATEADD(dd, 0, DATEDIFF(dd, 0, EventTime)))
更好的效率或優雅的建議?
這個樓層到月份:
select dateadd(month,datediff(m,0,GETDATE()),0);
輸出:
-----------------------
2009-10-01 00:00:00.000
(1 row(s) affected)
試試這個:
SELECT
COUNT(*) as CountOF
,dateadd(month,datediff(m,0,EventTime),0)
FROM [Event]
GROUP BY dateadd(month,datediff(m,0,EventTime),0)
ORDER BY 2
SELECT
COUNT(1) AS [CountOfEvents],
DATEADD(month, DATEDIFF(month, 0, [EventTime]), 0) AS [Month]
FROM [Event]
GROUP BY DATEADD(month, DATEDIFF(month, 0, [EventTime]), 0)
您可以使用MONTH(GetDate())
T-SQL函數。
你也只是試圖從日期時間剝離時間?
如果是這樣,試試這個:
DATEADD(d, DATEDIFF(d, 0, GetDate()), 0)
它更清潔,更具可讀性。
可能這更“可讀”:
SELECT
COUNT(1) AS [CountOfEvents],
CONVERT(datetime, CONVERT(varchar, EventTime, 112)) + 1 - DAY(EventTime) AS [Month]
FROM [Event]
GROUP BY CONVERT(datetime, CONVERT(varchar, EventTime, 112)) + 1 - DAY(EventTime)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.