SQL服务器:基于日期和两个不同的时间
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
可以使用
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中。
Select
ProjectName, count(ProjectName) as CountProjects, Releasedate
From
DBTable
Where
Releasedate >= convert(nvarchar, getdate())
Group by
projectname,releasedt
Order by
CountProjects desc
附:不要使用内置的功能,而选择任一列的别名
如果您邮政编码或XML,**请**嗨在文本编辑器中点击这些行,然后单击编辑器工具栏上的“代码”按钮(101 010)以精确地格式化和语法突出显示它! – 2010-12-10 15:59:54
您可以在日期的简单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)
我将离开这些部件组合成一个字段作为锻炼你,如果你想要的,但是这仅日期分组
要组时将忽略的Releasedate
时间部分,请尝试使用CONVERT函数:
GROUP BY projectname, CONVERT(nvarchar, Releasedate, 101)
您将希望在选择列表中使用相同的CONVERT
函数调用,以便查询的输出也只显示日期。
为什么要转换成NVARCHAR?只需将CAST加入日期,即可完成...... – 2010-12-10 16:04:25
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)
为了解释:
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)
感谢您对此的帮助。伊恩有我正在寻找的答案。丹尼尔,我会考虑将“DATEPART”合并成一个日期。 – 2010-12-10 16:35:41