Как я могу сгруппировать по столбцу даты и времени, не принимая во внимание время

221

У меня есть несколько заказов на продукты, и я пытаюсь сгруппировать их по дате и суммировать количество для этой даты. Как я могу сгруппировать по месяцу / дню / году без учета времени?

3/8/2010 7:42:00 должны быть сгруппированы с 3/8/2010 4:15:00

Маффин Человек
источник
2
Смотрите также похожие группы в час
Майкл Фрейдгейм

Ответы:

374

Приведение / преобразование значений в Dateтип для вашей группы по.

GROUP BY CAST(myDateTime AS DATE)
Одед
источник
3
Вы знаете, как бы я сделал то же самое с LINQ to SQL?
Маффин Ман
1
@ Ник - не уверен. Попробуйте использовать DateTime.Date.
Одед
3
- Linq to Sql: DateTime.Date- Структура Entity:EntityFunctions.TruncateTime(myDateTime)
Человек
1
Я согласен, я отвечал на The Muffin Man, который спрашивал об этом в контексте ORM.
Нильс Бринч
4
Большое спасибо ... это решило мою проблему. добавлено «группировка по CAST (date_modified AS DATE)». не забудьте добавить то же самое (CAST (date_modified AS DATE)) в select cluase.
Мохаммед Мансур
25
GROUP BY DATEADD(day, DATEDIFF(day, 0, MyDateTimeColumn), 0)

Или в SQL Server 2008 и Date более поздних версиях вы можете просто привести его в соответствие с @Oded:

GROUP BY CAST(orderDate AS DATE)
Митч Пшеничный
источник
16

В предварительном Sql 2008 г., взяв дату часть:

GROUP BY CONVERT(CHAR(8),DateTimeColumn,10)
Kamyar
источник
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)
user3169774
источник
1
ORDER BY не будет работать так, как предполагалось, потому что он не будет обрабатывать его как дату, поэтому он будет сортироваться по дням
Оружие X
2

Вот пример отлично работает в оракуле

select to_char(columnname, 'DD/MON/yyyy'), count(*) from table_name group by to_char(createddate, 'DD/MON/yyyy');
Radhakrishnan
источник
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-сервера.
Дэйв Хоган