Определите каждый час между временем начала и окончания - PullRequest
0 голосов
/ 17 октября 2018

Не совсем уверен, как это описать, но я попробую.

Фон

Мне нужно заполнить некоторые исторические производственные данные в данныесклад, и будет записывать это в час для каждой из производственных линий.Это будет одноразовое действие, а не текущий процесс.

Желаемый результат

Мне нужно создать табличную переменную, которая будет содержать разбивку по каждому часу,то есть

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 голосов
/ 17 октября 2018

Ваша разница в часах для часов

  1. выберите DATEDIFF (ЧАС, «Ваша дата начала», «Ваша дата окончания») из таблицы_1
  2. выберите DATEDIFF(ЧАС, '2018-10-19', '2018-10-20') из Таблицы_1
0 голосов
/ 17 октября 2018

В этом решении используется рекурсия:

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

...