确定开始时间和结束时间之间的每个小时

时间:2018-10-17 07:52:32

标签: sql sql-server datetime stored-procedures

不太确定如何描述这一点,但我会试一试。

背景

我需要将一些历史制造数据回填到数据仓库中,并将每小时为每个生产线记录一次。这将是一次性活动,而不是一个持续的过程。

所需结果

我需要创建一个表变量,其中包含每小时的细分,即

Row ID | Start Time
1      | 2018-01-01 00:00:00
2      | 2018-01-01 01:00:00
...etc...
nn     | 2018-10-12 10:00:00

如果我可以将两个时间点之间的时间分配到一个表(已定义)中,那么我可以运行相关例程来回填数据。我确信这很容易实现-有人可以给我任何指示吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

此解决方案使用递归:

DECLARE @starttime datetime='2018-01-01 00:00:00'
DECLARE @endtime datetime='2018-01-02 00:00:00'

;WITH hour_tbl(row_id,hour_value) AS (
  SELECT 1,@starttime    -- Seed Row
  UNION ALL
  SELECT row_id+1,dateadd(hour,1,hour_value) -- Recursion
  FROM hour_tbl
  WHERE dateadd(hour,1,hour_value)<=@endtime
)
SELECT *
FROM hour_tbl

请注意;之前的WITH

答案 1 :(得分:1)

您的小时工时差

  1. 从表_1中选择DATEDIFF(小时,“您的开始日期”,“您的结束日期”)
  2. 从表_1中选择DATEDIFF(HOUR,'2018-10-19','2018-10-20')