Как разделить время на почасовой интервал с помощью SQL (можно использовать представление или сохраненный процесс или функцию) - PullRequest
1 голос
/ 03 июля 2019

Пример У меня есть данные в таблице, которые имеют дату начала, дату окончания и продолжительность.Я хочу показать часовой интервал.

логика :

  • Условие 1. Если дата начала = 9: 00 и дата окончания = 11:00, затем отобразите дату как

    09:00-10:00
    10:00-11:00 
    

    . Она должна повторяться 2 раза, а все связанные данные столбца также будут повторяться 2 раза.это продолжится, если временной интервал предположит 11: 00-14: 00, тогда

    11:00-12:00
    12:00-13:00
    13:00-14:00
    

    Это должно повториться 3 раза.

  • Условие 2: Если дата начала9:30 и дата окончания 10:30, тогда время должно округляться.то есть дата начала должна быть 9:00, а дата окончания должна быть 11:00

Как я могу добиться этого в Sql Server?

1 Ответ

1 голос
/ 03 июля 2019

Я предполагаю, что ваша проблема заключается в получении нескольких строк из одной, а не форматировании значений даты / времени в виде строки.

Для этого вы можете использовать рекурсивный CTE:

with cte as (
      select startdate as thetime, t.*
      from t
      union all
      select dateadd(hour, 1, cte.startdate), . . .  -- rest of columns here
      from cte
      where cte.thetime < cte.enddate
     )
select cte.*
from cte;

Затем вы можете отформатировать thetime так, как вам нравится, включая дефисированную версию в вашем вопросе.

В SQL Server для рекурсии установлено ограничение по умолчанию 100 - количество создаваемых строк.В вашем примере используется только время, поэтому оно не может превышать 24 и не является проблемой.Однако это может быть проблемой в других обстоятельствах, в этом случае option (maxrecursion 0) может быть добавлено к запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...