如何在不考虑时间的情况下按日期时间列分组
Posted
技术标签:
【中文标题】如何在不考虑时间的情况下按日期时间列分组【英文标题】: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
分组
【问题讨论】:
另见类似group per hour 【参考方案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)
【讨论】:
关于转换函数和日期时间类型的解释(char(8)和10的含义)见w3schools.com/sql/func_convert.asp【参考方案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 的解决方案。以上是关于如何在不考虑时间的情况下按日期时间列分组的主要内容,如果未能解决你的问题,请参考以下文章