Mam stół z dwoma polami - datetime
i int
. Chcę datetime
umówić się na spotkanie tylko w dniu, ignorując godzinę i minuty. SELECT
Stwierdzenie powinno powrócić datę, która mapuje do sumy int jednego dnia.
Odpowiedzi:
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)
Nie ze złej błąd składni
Ponieważ nie sprecyzował, jakiej wersji serwera SQL używa ( date
typ nie jest dostępny w 2005 roku), można go było również użyć
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)
Przyszedłem badać opcje, które musiałbym zrobić, jednak uważam, że metoda, której używam, jest najprostsza:
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;
- Podoba mi się to, ponieważ typ danych i format pozostają zgodne z typem danych daty i godziny
;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