使用CAST从getdate中移除时间以获取昨天最后7天的结果

时间:2011-12-14 09:27:59

标签: sql-server

我正在使用此声明

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)

但我似乎无法将其与此查询一起使用。

任何帮助?

2 个答案:

答案 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]