2010-12-10 84 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)