Як можна групувати стовпець часу за датою, не беручи до уваги час


221

У мене є купа замовлень продуктів, і я намагаюся групуватись за датою та підсумовувати кількість на цю дату. Як я можу групуватись за місяцем / днем ​​/ роком, не беручи до уваги частину часу?

3/8/2010 7:42:00 слід згрупувати 3/8/2010 4:15:00


2
Дивіться також подібну групу за годину
Майкл Фрейджім

Відповіді:


374

Віддайте / конвертуйте значення у Dateтип для вашої групи.

GROUP BY CAST(myDateTime AS DATE)

3
чи знаєте ви, як я би зробив те саме з LINQ для SQL?
Людина-булочка

1
@Nick - не впевнений. Спробуйте використовувати DateTime.Date.
Одід

3
- Linq to Sql: DateTime.Date- Entity Framework:EntityFunctions.TruncateTime(myDateTime)
The Muffin Man

1
Я погоджуюсь, я відповідав чоловікові кефів, який розпитував про це в контексті ORM.
Нільс Брінч

4
Велике спасибі ... це вирішило мою проблему. додано "групу за CAST (дата_модифіковано AS DATE)". не забудьте додати те саме (CAST (дата_змінено AS DATE)) у довірі про вибір.
Мухаммед Мансур

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

Або в SQL Server 2008 і далі ви можете просто передати так, Date як @Oded запропонував:

GROUP BY CAST(orderDate AS DATE)

16

У попередньому кварталі 2008 р. Виймаючи частину дати:

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

2
Пояснення щодо функції перетворення та типу часу дати (значення char (8) та 10) див. W3schools.com/sql/func_convert.asp
super1ha1


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
ЗАМОВЛЕННЯ НЕ працює, як передбачається, тому що він не буде вважати це датою, тому він буде сортувати по днях
Зброя 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, який проходить за тегами, ОП шукає рішення для SQL сервера.
Дейв Хоган
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.