2011-09-14 537 views

回答

90
SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField 
FROM MyTable 
GROUP BY CAST(Datetimefield AS DATE) 
+9

這隻適用於SQL Server 2008+(當引入Date數據類型時)。如果你在2005年或更早的時候,改變轉換爲convert(convert(int,Datetimefield),datetime)應該工作。 –

+0

我收到一條錯誤消息,說'類型日期不是已定義的系統類型'。 – Steven

+5

@Steven - 然後看看Derek的評論。這就是爲什麼在問題中包含** VERSION **是一個好主意。 – JNK

20

由於他沒有具體說明他使用的SQL Server版本(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) 
+0

+1 - 版本控制 – JNK

+0

他好嗎? ........... – Sentinel

+0

在像2000/2005這樣的老版本中,這個需求的varchar轉換比使用'DATEADD(dd,DATEDIFF(dd,0,date_field),0)'' –

1

- 我喜歡這個作爲數據類型和

;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 
4

我來研究,我會做這個選項的格式保持與日期時間數據類型一致的,但是,我相信我使用的方法是最簡單的:

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; 
+1

'在任何版本的SQL Server中都比使用varchar轉換更快。 –