2010-12-10 93 views
2

OS計數 - WindowsXP的SQL服務器:基於日期和兩個不同的時間

SQL Server Management Studio中2008 R2

我試圖得到一個基於發佈日期的項目數的計數,NOT日期和時間。但是,某些項目具有相同的發佈日期但時間不同,並被視爲單獨的項目。只要項目有相同的日期,我希望它被計算在內。

在服務器上 'RELEASEDATE' 是 「日期時間」

Select ProjectName, count(ProjectName) as Count, (Releasedate) 
From DBTable Where Releasedate >= convert(nvarchar,(getdate())) 
Group by projectname,releasedt 

當前結果:

ProjectName  Count  Releasedate 

Project_Nm_1  1    2010-03-27 00:00:00 
Project_Nm_1  1    2010-03-27 08:00:00 
Project_Nm_2  1    2010-03-27 00:00:00 
Project_Nm_2  1    2010-03-27 08:00:00 

我想看看:

Project_Nm_1  2    2010-03-27 
Project_Nm_2  2    2010-03-27 

回答

0

可以使用

DateAdd(dd, 0, DateDiff(dd, 0, ReleaseDate)) 

因此您的查詢就會成爲

SELECT 
    ProjectName, 
    Count(ProjectName) as Count, 
    DateAdd(dd, 0, DateDiff(dd, 0, ReleaseDate)) as ReleaseDate 
FROM 
    DBTable 
WHERE 
    ReleaseDate >= getdate() 
GROUP BY 
    ProjectName, 
    DateAdd(dd, 0, DateDiff(dd, 0, ReleaseDate)) 

得到RELEASEDATE日期時間的日期部分。如果你發現自己剝從日期時間開始計時,然後將其封裝在UDF中。

+0

感謝您對此的幫助。伊恩有我正在尋找的答案。丹尼爾,我會考慮將「DATEPART」合併成一個日期。 – 2010-12-10 16:35:41

0
Select 
    ProjectName, count(ProjectName) as CountProjects, Releasedate 
From 
    DBTable 
Where 
    Releasedate >= convert(nvarchar, getdate()) 
Group by 
    projectname,releasedt 
Order by 
    CountProjects desc 

附:不要使用內置的功能,而選擇任一列的別名

+1

如果您郵政編碼或XML,**請**嗨在文本編輯器中點擊這些行,然後單擊編輯器工具欄上的「代碼」按鈕(101 010)以精確地格式化和語法突出顯示它! – 2010-12-10 15:59:54

0

您可以在日期的簡單GROUP BY部分你想使用DATEPART

SELECT 
    ProjectName, 
    Count(*), 
    DATEPART(year, Releasedate) as ReleaseYear, 
    DATEPART(month, Releasedate) as ReleaseMonth, 
    DATEPART(day, Releasedate) as ReleaseDay 
FROM 
    DBTable 
WHERE 
    Releasedate >= convert(nvarchar,(getdate())) 
GROUP BY 
    ProjectName, 
    DATEPART(year, Releasedate), 
    DATEPART(month, Releasedate), 
    DATEPART(day, Releasedate) 

我將離開這些部件組合成一個字段作爲鍛鍊你,如果你想要的,但是這僅日期分組

1

要組時將忽略的Releasedate時間部分,請嘗試使用CONVERT函數:

GROUP BY projectname, CONVERT(nvarchar, Releasedate, 101) 

您將希望在選擇列表中使用相同的CONVERT函數調用,以便查詢的輸出也只顯示日期。

看看: http://codingforums.com/showthread.php?t=56536

+1

爲什麼要轉換成NVARCHAR?只需將CAST加入日期,即可完成...... – 2010-12-10 16:04:25

3

SQL Server 2008中引入這不正是你要尋找新的DATE數據類型 - 只處理日期,沒有任何時間。因此,只要CAST你的領域DATE,你應該罰款:

SELECT 
    ProjectName, COUNT(ProjectName) as Count, CAST(Releasedate AS DATE) 
FROM 
    dbo.DBTable 
WHERE 
    CAST(Releasedate AS DATE) >= CAST(GETDATE() AS DATE) 
GROUP BY 
    projectname, CAST(ReleaseDate as DATE) 
0

爲了解釋:

declare @dt datetime 
set @dt = '2010/12/22 12:34:56' 
print @dt 
print convert(char(8), @dt, 112) 

結果:

Dec 22 2010 12:34PM 
20101222 

因此,使用

GROUP BY convert(char(8), releasedt, 112) 
相關問題