У меня есть таблица с двумя полями - datetime
и int
. Я хочу сделать группу datetime
только по дате, игнорируя час и минуту. SELECT
Заявление должно возвращать дату , которая отображает на сумму междунара одного дня.
sql-server
datetime
select
group-by
Стивен
источник
источник
Ответы:
SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField FROM MyTable GROUP BY CAST(Datetimefield AS DATE)
источник
select convert(convert(int, getdate()), datetime)
с неправильной синтаксической ошибкойПоскольку он не указал, какую версию SQL-сервера он использует (
date
тип недоступен в 2005 году), можно также использоватьSELECT CONVERT(VARCHAR(10),date_column,112),SUM(num_col) AS summed FROM table_name GROUP BY CONVERT(VARCHAR(10),date_column,112)
источник
DATEADD(dd, DATEDIFF(dd, 0, date_field),0)
Я приехал изучать варианты, которые мне нужно было бы сделать, однако я считаю, что метод, который я использую, самый простой:
SELECT COUNT(*), DATEADD(dd, DATEDIFF(dd, 0, date_field),0) as dtgroup FROM TABLE GROUP BY DATEADD(dd, DATEDIFF(dd, 0, date_field),0) ORDER BY dtgroup ASC;
источник
- Мне это нравится, поскольку тип данных и формат остаются совместимыми с типом данных даты и времени.
;with cte as( select cast(utcdate as date) UtcDay, DATEPART(hour, utcdate) UtcHour, count(*) as Counts from dbo.mytable cd where utcdate between '2014-01-14' and '2014-01-15' group by cast(utcdate as date), DATEPART(hour, utcdate) ) select dateadd(hour, utchour, cast(utcday as datetime)) as UTCDateHour, Counts from cte
источник
Лично я предпочитаю функцию форматирования, которая позволяет очень легко изменить часть даты.
declare @format varchar(100) = 'yyyy/MM/dd' select format(the_date,@format), sum(myfield) from mytable group by format(the_date,@format) order by format(the_date,@format) desc;
источник