如何在不考虑时间的情况下按日期时间列进行分组


Answers:


374

强制转换/转换Date为分组依据的类型。

GROUP BY CAST(myDateTime AS DATE)

3
您知道我将如何使用LINQ to SQL进行同样的操作吗?
松饼人

1
@尼克-不确定。尝试使用DateTime.Date
奥德(Oded)

3
-Linq to Sql:DateTime.Date-实体框架:EntityFunctions.TruncateTime(myDateTime)
松饼人

1
我同意,我是在ORM上下文中回应正在询问有关问题的The Muffin Man的。
Niels Brinch

4
非常感谢...它解决了我的问题。添加了“按CAST(date_modified AS DATE)分组”。不要忘了在选择的字符串中添加相同的内容(CAST(date_modified AS DATE))。
Mohammed mansoor

25
GROUP BY DATEADD(day, DATEDIFF(day, 0, MyDateTimeColumn), 0)

或者从SQL Server 2008开始,您可以 Date 按照@Oded的建议进行转换:

GROUP BY CAST(orderDate AS DATE)



2

这是当我需要计算特定日期的记录数而没有时间部分时使用的示例:

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)

1
ORDER BY无法按预期方式工作,因为它不会将其视为日期,因此会按天排序
武器X

2

这是在oracle中正常工作的示例

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

2

迄今为止的CAST日期时间字段

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

0

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

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

date_trunc适用于PostgreSQL,而不适用于SQL Server,因为OP一直在寻找SQL Server的解决方案。
Dave Hogan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.