T-SQL代码来获得一个DateTime只包含月份和年份的任何日期时间(T-SQL code to

2019-08-17 03:04发布

给定一个表Event包含了一个名为场EventTime DateTime类型和值将同时包含日期和时间元素,我需要创造出计算每个月的事件数量汇总查询。

集团通过场产生的类型也必须是日期时间与0时间元素,并设置为每月的第一天。

这是我到目前为止,但它不是很优雅,我不知道它是特别有效。

  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)))

对于任何一个更高的效率或优雅更好的建议?

Answer 1:

这个楼层的月份:

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


Answer 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)


Answer 3:

有一个MONTH(GetDate()) T-SQL函数可以使用。

此外,你只是试图剥去日期时间的时间?

如果是的话,试试这个:

DATEADD(d, DATEDIFF(d, 0, GetDate()), 0) 

这是一个有点清洁,更具可读性。



Answer 4:

可能这是更“可读”:

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)


文章来源: T-SQL code to get a DateTime contain only Month and Year from any DateTime