当前位置: 首页 > 面试题库 >

用于获取DateTime的T-SQL代码仅包含来自任何DateTime的Month和Year

司知
2023-03-14
问题内容

给定一个表Event,该表包含一个名为EventTimeDateTime类型的字段,并且该值将包含日期和时间元素,我需要创建一个摘要查询,该查询对每个月的事件数进行计数。

分组依据字段的结果类型还必须是带有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)))

更好的建议,以获得更高的效率或更优雅?


问题答案:

到本月的下限:

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


 类似资料:
  • 问题内容: 在我的SQL Server我有测试,其中只包含三行一个非常简单的表: ,和(,,)。 SQL中的DateTime格式类似于:。 C#中的DateTime格式类似于:。 我使用以下代码获取C#DateTime格式: 如果我尝试将其放入,则会出现错误: 日历不支持由字符串表示的DateTime。 在我的C#应用​​程序中,我正在尝试查找破损日期之间的总小时数。我有点想使用它了,但是它只适用

  • 问题内容: 我在表中有字段。它包含的值为“ 2009-12-30 11:47:20:297”,我有这样的查询: 尽管今天的日期存在一行,但是在执行上述查询时我没有得到这一行。有人可以帮忙吗? 问题答案: 您的查询未返回期望的行的原因是因为GETDATE()返回了执行查询时的日期和时间部分。列中的值与时间部分不匹配,因此不会返回任何行。 有多种构造查询的方法,以便查询仅基于日期组件来评估日期。这是一

  • 问题内容: 我正在研究一个存储过程,该过程返回一列数据类型。 但是,我只想返回几秒钟。我正在使用它,但它返回秒。 有删除秒的想法吗? 问题答案: 只需将其更改为转换为VARCHAR(5):)

  • 我有datetime格式的值。例如:2012-10-17 00:05:00.000我把它们铸成了时间格式,但对我来说还是太长了。我只想要一个小时一个分钟的时间。有人知道吗?

  • Cassandra有一个timeuuid类型,有一些函数可以为“now”创建timeuuid。还有从timeuuid返回时间的记录方法。但是,是否有一种方法可以从joda DateTime中获取timeuuid?感觉这应该存在。

  • 问题内容: 我有bigInt:我需要将其转换为。 我尝试了几种方法来做到这一点: 和: 当我发现上面的代码与like:一起使用时,通过我的bigInt我收到以下错误: 消息8115 …将表达式转换为数据类型datetime的算术溢出错误。 有谁知道如何解决吗? 问题答案: 以下是一些可以将bigint计算为日期时间的计算。 结果: 稍作改动,这些日期时间就可以被截断或四舍五入。