Sql server 使用CAST从getdate中删除时间,以获取从昨天开始的最后7天的结果

Sql server 使用CAST从getdate中删除时间,以获取从昨天开始的最后7天的结果,sql-server,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 F

我用的是这句话

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天

然而,它得到的结果,从昨天这个时候,但我希望它得到所有的结果,从昨天,所以我知道我要使用一个演员

强制转换(FLOOR(强制转换(GETDATE()为FLOAT))为DATETIME)

但我似乎无法让它与这个查询一起工作


有什么帮助吗?

要从datetime开始计算trunc time,请使用cast(getdate()作为日期):


哇!您使用的是什么版本的microsoft sql server? 试试这个

结果对我来说:

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) 
应返回8位YYYYMMDD

20111216

如果您得到了这个结果,那么您就得到了不起作用的解决方案

,我将from更改为表名,但它抛出了一个loadsa错误设置此错误消息243,级别16,状态1,行1类型日期不是定义的系统类型。
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) 
select convert(char(8), getdate(),112)
20111216