2013-10-18 85 views
1

好吧,我正在Visual Studio 2008中運行查詢生成器。我試圖按時間篩選查詢結果;也就是說,我想從昨天開始到昨天中午的所有事情。 我昨天一直在使用GETDATE() - 1,它會拉起時間戳mm/dd/yyyy hh:mm:ss 但是,它會拉出當前時間。得到它從當天開始運行我附加了時間戳刪除時間本身,所以它開始在一天的開始:TSQL按時間/小時篩選查詢

convert(varchar(10), getdate()-1, 120) 

所以我使用之間找到的範圍內,我有: BETWEEN轉換(varchar(10),getdate()-1,120)和/ /這是我需要它在中午切斷。

我知道datetime是一個數據類型,因此我試着用日期部分減去小時/分鐘/秒,但是datepart()只返回整數並且不影響時間。

想法?我怎麼得到這個中午切斷

+1

你是什麼版本的SQL Server上? –

回答

-1
DECLARE 
    @Min DATETIME 
    , @Max DATETIME 

SELECT 
    @Min = DATEADD(DAY, -1, CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)) 
    , @Max = DATEADD(HOUR, 12, CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)) 

SELECT * 
FROM <Table> x 
WHERE x.[Date] BETWEEN @Min AND @Max 
+0

在查詢設計器中,聲明語句不受支持 – nbpeth

+0

我沒有代表回答,但它稍作修改它在查詢設計器中工作。感謝你們! CAST(GETDATE() - 1 AS DATE)和DATEADD(HOUR,12,CAST(FLOOR(CAST(GETDATE() - 1 AS FLOAT))AS DATETIME)) – nbpeth

+0

@ user2716330如果它起作用, downvote我的答案? –

0
between DateAdd(day, -1, cast(getdate() as date)) and DateAdd(hour, -12, cast(getdate() as date)) 

編輯:正如在評論中提到的,你不能用日使用時間,你必須將它轉換回一個日期時間,即:

between DateAdd(day, -1, cast(getdate() as date)) and DateAdd(hour, -12, cast(cast(getdate() as date) as datetime)) 
+0

好點,需要把它帶回到日期時間,然後再把時間帶走。 '和DateAdd(小時,-12,轉換(作爲日期轉換(GetDate()作爲日期))' 因爲它幾乎不存在,所以Downvote是不必要的。 –

0
SELECT * FROM T WHERE YourDate BETWEEN CAST(GETDATE()-1 As DATE) AND DATEADD(Hour, -12, CAST(CAST(GETDATE() As DATE) As DATETIME)) 

當心,因爲BETWEEN將包括下限和上限,所以你可以簡單地用x >= y and y < z更換BETWEEN如果你不想做yesterday at 12:00賬戶採取

+0

「錯誤消息:日期部分小時不支持日期函數dateadd數據類型日期」 – nbpeth

0
DECLARE @CurrentDate DATETIME; 
SET @CurrentDate = GETDATE(); 

DECLARE @StartDate DATETIME, @EndDate DATETIME; 

SET @StartDate = DATEADD(DAY, DATEDIFF(DAY, 0, @CurrentDate)-1, 0); 
SET @EndDate = DATEADD(HOUR, -12, DATEADD(DAY, DATEDIFF(DAY, 0, @CurrentDate), 0)); 
SELECT @CurrentDate AS [GetDate], @StartDate AS StartDate, @EndDate AS EndDate; 

-- Query 
SELECT ... FROM ... WHERE DateTimeColumn >= @StartDate AND DateTimeColumn <= @EndDate 
-- or 
SELECT ... FROM ... WHERE DateTimeColumn BETWEEN @StartDate AND @EndDate 

結果(SELECT @variables):

GetDate     StartDate    EndDate 
----------------------- ----------------------- ----------------------- 
2013-10-18 21:33:27.330 2013-10-17 00:00:00.000 2013-10-17 12:00:00.000 
1

試試這個:

--Variables 
declare @now datetime = getdate(), 
     @yesterday datetime 

--Yesterday starting datetime 
select @yesterday = convert(datetime, convert(date, dateadd(day,-1,@now))) 

--Your query to filter between y'day start and y'day noon 
--Note that between means inclusive boundary values. (or use >= and <=) 
select * from yourTable 
where dateCol between @yesteray and dateadd(hour,12,@yesterday) 
0

如果你想從最後30分鐘的結果,你需要使用這個。您也可以將MINUTE更改爲HOUR

--Get now, hour and second included  
DECLARE @NOW DATETIME = GETDATE() 

--Get 30 mins from now 
DECLARE @TranDate DATETIME 
SET @TranDate = CONVERT(DATETIME, CONVERT(DATETIME, DATEADD(MINUTE,-30,@NOW))) 

在此之後,下面的代碼添加到您的where語句,

AND TK.TransactionDate >= @TranDate