2016-11-14 71 views

回答

2

另一種選擇(假設SQL Server的2012+)

Select Format(DateAdd(HH,-2,GetDate()),'yyyy-MM-dd HH:00:00') 
     ,Format(DateAdd(HH,-1,GetDate()),'yyyy-MM-dd HH:00:00') 

返回

(No column name)  (No column name) 
2016-11-14 12:00:00 2016-11-14 13:00:00 

編輯插圖否需要重鑄

Declare @Table table (SomeDateTime datetime) 
Insert Into @Table values 
('2016-11-14 12:15:00'), 
('2016-11-14 13:30:00') 

Select * 
From @Table 
Where SomeDateTime Between Format(DateAdd(HH,-2,GetDate()),'yyyy-MM-dd HH:00:00') 
         and Format(DateAdd(HH,-1,GetDate()),'yyyy-MM-dd HH:00:00') 

返回

2016-11-14 12:15:00.000 
+0

作爲@馬特提到(我應該有),格式()有一些偉大的功能,但表現不佳。我傾向於使用的是非記錄級別的處理。 –

+0

@Matt請參閱編輯 - 無需重新編排爲datetime –

+1

是的我猜你是對的,由於FORMAT()與Datetime的隱式對話,因此DATETIME具有比VARCHAR更高的數據類型優先級,因此無需進行強制轉換https:// msdn.microsoft.com/en-us/library/ms190309.aspx。我只是有一個明確的習慣/偏好,我猜:),我喜歡FORM的方式+1,它只是非常容易相對而言,我希望表現更好! – Matt

2
SELECT * 
FROM 
    TableName 
WHERE 
    BETWEEN 

    DATEADD(HOUR,DATEPART(HOUR,GETDATE()) - 2,CAST(CAST(GETDATE() AS DATE) AS DATETIME)) 

    AND 

    DATEADD(HOUR,DATEPART(HOUR,GETDATE()) - 1,CAST(CAST(GETDATE() AS DATE) AS DATETIME))