簡體   English   中英

獲取DateTime的T-SQL代碼僅包含任何DateTime的Month和Year

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM