Hai们我想用SQL中的前一小时数据。
我找到了类似的东西
DATEPART(hh,GETDATE())-1 –>
但它有一些问题,因为我的日期格式是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
答案 0 :(得分:5)
首先进行日期数学,然后提取小时:
DATEPART(hour,DATEADD(hour,-1,GETDATE()))
(另外,我讨厌日期组件的“短”形式。我总是把它全部拼出来,例如hour
对hh
,因为我发现它更具可读性,通常不是远远超过几个字符,我永远不会记得哪些是几个月与分钟相比)
答案 1 :(得分:1)
你可能想要这样的东西:
DECLARE @Now DATETIME = CURRENT_TIMESTAMP
DECLARE @FromTimeStamp DATETIME = DATEADD(HOUR, -1, @Now)
SELECT
(list of columns)
FROM
dbo.YourTableNameHere
WHERE
SomeDateColumn >= @FromTimeStamp
或类似的东西 - 这会从过去一小时的任何表中选择您想要的任何数据列(现在减去1小时)。
DATEADD
功能将处理日期/时间数学的所有讨厌细节 - 如果你在午夜后30分钟运行,将处理回到昨天晚上11:30就好了