在SQL中获取前一小时的数据

bib*_*hew 0 sql sql-server sql-server-2008

Hai们我想用SQL中的前一小时数据.

我找到了这样的东西

DATEPART(hh,GETDATE())-1 –> 
Run Code Online (Sandbox Code Playgroud)

但它有一些问题,因为我的日期格式是24小时.当时间在00.00.00-00.59.59之间时,它将给出-ve value(-1).我应该得到23作为价值.有什么建议?这就是我做的

DECLARE @hourlyaggregatedvolume smallint
DECLARE @hourlyaggregatedspeed smallint
DECLARE @hourlyaggregatedoccupancy float
DECLARE @hourlyaggregatedheadway float 
DECLARE @trafficdatadate datetime   
DECLARE @closeststationname nvarchar(100) = 'E100 1001'
DECLARE @accidentdate nvarchar(10) = '2014-02-17'
DECLARE @accidenttime nvarchar(10) = '01:10:00'
  SELECT 
           @hourlyaggregatedvolume = aggregated_volume,
           @hourlyaggregatedspeed  =aggregated_speed,
           @hourlyaggregatedheadway = aggregated_headway,
           @hourlyaggregatedoccupancy = aggregated_occupancy,
           @trafficdatadate = [date] 
           FROM dbo.traffic_data_aggregated_hourly    
           WHERE station = @closeststationname  
       AND CONVERT(DATE,[date]) = @accidentdate
       AND period = CASE WHEN SUBSTRING (@accidenttime,1,2) - 1 = -1 THEN 23
                    ELSE SUBSTRING (@accidenttime,1,2) - 1
                    END
       SELECT  @hourlyaggregatedvolume,@hourlyaggregatedspeed,@hourlyaggregatedheadway
       ,@hourlyaggregatedoccupancy,@trafficdatadate
Run Code Online (Sandbox Code Playgroud)

Dam*_*ver 5

先做数学数学,然后提取小时:

DATEPART(hour,DATEADD(hour,-1,GETDATE()))
Run Code Online (Sandbox Code Playgroud)

(另外,我最讨厌的"短"形式的日期组件.我总是宁愿拼出来完全如hourhh,因为我觉得它更具可读性,它通常不超过几个字符更加多了,我永远记得哪些是几个月与分钟)


参考文献:DATEADD,DATEPART,GETDATE