sql中的最后一小时(非添加-1小时)数据

sql中的最后一小时(非添加-1小时)数据,sql,getdate,Sql,Getdate,我试图获取最后一个小时的数据,如果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。假设SQL Server 2012的另一个选项+ SELECT * FROM TableName WHERE BETWEEN DATEADD(HOUR,DATEPART(HOUR,GETDATE()) - 2,CAS

我试图获取最后一个小时的数据,如果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。

假设SQL Server 2012的另一个选项+

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))
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
编辑插图无需重铸

返回

2016-11-14 12:15:00.000

另一个选项假定为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
编辑插图无需重铸

返回

2016-11-14 12:15:00.000

正如@Matt提到的和我应该提到的,Format有一些很棒的功能,但性能很差。我倾向于使用is进行非记录级处理。是的,我想你是对的,因为Datetime的数据类型优先级比VARCHAR高,所以不需要强制转换,因为格式隐式转换为Datetime begin done。我只是有一个习惯/偏好是明确的,我想:,+1顺便说一句,我确实喜欢格式,它相对来说是如此简单,我希望性能更好!正如@Matt提到的和我应该提到的,Format有一些很棒的功能,但性能很差。我倾向于使用is进行非记录级处理。是的,我想你是对的,因为Datetime的数据类型优先级比VARCHAR高,所以不需要强制转换,因为格式隐式转换为Datetime begin done。我只是有一个习惯/偏好是明确的,我想:,+1顺便说一句,我确实喜欢格式,它相对来说是如此简单,我希望性能更好!