【问题标题】:How can I group by date time column without taking time into consideration如何在不考虑时间的情况下按日期时间列分组
【发布时间】:2011-08-28 14:09:02
【问题描述】:

我有一堆产品订单,我正在尝试按日期分组并汇总该日期的数量。如何在不考虑时间部分的情况下按月/日/年分组?

3/8/2010 7:42:00 应与3/8/2010 4:15:00 分组

【问题讨论】:

标签: sql sql-server tsql sql-server-2008


【解决方案1】:

Cast/Convert 将值转换为 Date 类型的分组依据。

GROUP BY CAST(myDateTime AS DATE)

【讨论】:

  • 你知道我会如何对 LINQ to SQL 做同样的事情吗?
  • @Nick - 不确定。尝试使用DateTime.Date
  • - Linq to Sql:DateTime.Date - 实体框架:EntityFunctions.TruncateTime(myDateTime)
  • 我同意,我是在回复 The Muffin Man,他在 ORM 上下文中询问它。
  • 非常感谢...它解决了我的问题。添加了 'group by CAST(date_modified AS DATE)' 。不要忘记在选择条款中添加相同的( CAST(date_modified AS DATE) )。
【解决方案2】:
GROUP BY DATEADD(day, DATEDIFF(day, 0, MyDateTimeColumn), 0)

或者在 SQL Server 2008 之后,您可以按照@Oded 的建议简单地转换为Date

GROUP BY CAST(orderDate AS DATE)

【讨论】:

    【解决方案3】:

    在pre Sql 2008中通过取出日期部分:

    GROUP BY CONVERT(CHAR(8),DateTimeColumn,10)
    

    【讨论】:

    【解决方案4】:

    GROUP BY DATE(date_time_column)

    【讨论】:

      【解决方案5】:

      CAST 日期时间字段到日期

      select  CAST(datetime_field as DATE), count(*) as count from table group by CAST(datetime_field as DATE);
      

      【讨论】:

        【解决方案6】:

        下面是一个示例,当我需要计算不带时间部分的特定日期的记录数时:

        select count(convert(CHAR(10), dtcreatedate, 103) ),convert(char(10), dtcreatedate, 103)
        FROM dbo.tbltobecounted
        GROUP BY CONVERT(CHAR(10),dtcreatedate,103)
        ORDER BY CONVERT(CHAR(10),dtcreatedate,103)
        

        【讨论】:

        • ORDER BY 不会按预期工作,因为它不会将其视为日期,因此它将按天排序
        【解决方案7】:

        这是在 oracle 中运行良好的示例

        select to_char(columnname, 'DD/MON/yyyy'), count(*) from table_name group by to_char(createddate, 'DD/MON/yyyy');
        

        【讨论】:

          【解决方案8】:

          嗯,对我来说这很直接,我使用了 groupby 演员:

          例子:

          Select cast(created_at as date), count(1) from dbname.tablename GROUP BY cast(created_at as date)
          

          注意:我在 MSSQL 2016 上使用它。

          【讨论】:

            【解决方案9】:

            我相信您需要在一年中的那一天进行分组。 那么为什么不使用 TRUNK_DATE 函数。 它的工作方式如下所述:

            Group By DATE_TRUNC('day' , 'occurred_at_time')
            

            【讨论】:

            • date_trunc 是针对 PostgreSQL 而不是 SQL Server 的标签,OP 正在寻找 SQL Server 的解决方案。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-13
            • 1970-01-01
            • 2015-03-16
            相关资源
            最近更新 更多