2011-12-14 58 views
0

我使用這個說法使用CAST從GETDATE刪除時間擺脫過去7天的結果從昨天

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]) 

其中工程perfectl; y和獲取過去7天從昨天。

但是它會從這次的結果昨天,但我希望它得到所有從昨天的結果,所以我知道IM使用強制.....

CAST(FLOOR(CAST(GETDATE( )作爲FLOAT))作爲日期時間)

但我似乎無法讓它與這個查詢一起工作。

有幫助嗎?

回答

0

到TRUNC時間從日期時間使用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] 
+0

沒有工作,我改變了從表中的名字,但它扔loadsa錯誤 – 2011-12-14 11:03:59

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的數據類型,你需要找到另一種方式來從日期TRUNC時間是這樣的:

select convert(char(8), getdate(),112) 

應返回8位YYYYMMDD

20111216 

,如果你有這樣的結果,那麼你有解決方案