1
我想要得到最後一小時的數據,如果getdate()返回我'2016-11-14 13:09:09.653'那麼我想從數據'2016-11-14 11:00:00.000'至'2016-11-14 12:00:00.000',而不僅僅是12:09至01:00。最後一小時(不加-1小時)的數據在sql
我想要得到最後一小時的數據,如果getdate()返回我'2016-11-14 13:09:09.653'那麼我想從數據'2016-11-14 11:00:00.000'至'2016-11-14 12:00:00.000',而不僅僅是12:09至01:00。最後一小時(不加-1小時)的數據在sql
另一種選擇(假設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
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))
作爲@馬特提到(我應該有),格式()有一些偉大的功能,但表現不佳。我傾向於使用的是非記錄級別的處理。 –
@Matt請參閱編輯 - 無需重新編排爲datetime –
是的我猜你是對的,由於FORMAT()與Datetime的隱式對話,因此DATETIME具有比VARCHAR更高的數據類型優先級,因此無需進行強制轉換https:// msdn.microsoft.com/en-us/library/ms190309.aspx。我只是有一個明確的習慣/偏好,我猜:),我喜歡FORM的方式+1,它只是非常容易相對而言,我希望表現更好! – Matt