我正在使用此声明
SELECT TOP (100) PERCENT CONVERT(varchar(255), [Reg Date1], 103) AS [Reg Date], Regs
FROM (SELECT CONVERT(datetime, CONVERT(varchar(255), SetupDateTime, 101)) AS [Reg Date1], COUNT(DISTINCT ID) AS Regs
FROM dbo.tbl_User
WHERE SetupDateTime
BETWEEN (DATEADD (dd , -7 , GETDATE())) AND (DATEADD (dd , -1 , GETDATE()))
GROUP BY CONVERT(datetime, CONVERT(varchar(255), SetupDateTime, 101))) AS tb
ORDER BY CONVERT(datetime, [Reg Date1])
完美无瑕;从昨天开始的最后7天。
然而它从昨天的这个时间得到了结果,但我希望它能从昨天得到所有的结果,所以我知道即时通讯使用演员......
CAST(地板(CAST(GETDATE()AS FLOAT))AS DATETIME)
但我似乎无法将其与此查询一起使用。
任何帮助?
答案 0 :(得分:1)
哇!你使用的是什么版本的microsoft sql server? 试试这个
select @@VERSION
我的结果:
Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) Sep 21 2011 22:45:45 Copyright (c) 1988-2008 Microsoft Corporation Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
如果你没有DATE数据类型,你需要找到另一种从日期截断时间的方法,如下所示:
select convert(char(8), getdate(),112)
应返回8位YYYYMMDD
20111216
如果你有这个结果,那么你有解决方案
答案 1 :(得分:0)
从datetime使用cast(getdate()作为日期)截断时间:
select CONVERT(char(10), [Reg Date1], 103) [Reg Date], Regs
from (
select cast(SetupDateTime as DATE) [Reg Date1], COUNT(distinct ID) [Regs]
from SetupDateTime
where cast(SetupDateTime as DATE)
between cast((DATEADD (dd , -7 , GETDATE())) AS DATE)
and cast((DATEADD (dd , -1 , GETDATE())) AS DATE)
group by cast(SetupDateTime as DATE)
) a
order by a.[Reg Date1]