SQL - возвращать даты для интервалов в 2 или 3 недели (до и после) на основе значения даты и времени - PullRequest
0 голосов
/ 25 марта 2020

Есть ли способ указать дату (2020-01-20) и затем возвращаться каждые 2 недели вперед и назад между началом и окончанием периода sh. Так, например, с 01 января 2020 года по 01 марта 2020 года. Список всех дат каждые 2 недели с этой входной даты.

Пример табличных данных для справки ...

DECLARE @Source TABLE(bookingcode int, NextWeekCommDate DATETIME, Cycle int)
insert into @Source (bookingcode, NextWeekCommDate, cycle)
select 556789, '23 Mar 2020', 2
insert into @Source (bookingcode, NextWeekCommDate, cycle)
select 556790, '30 Mar 2020', 3
select * from @Source

declare @from datetime = '01 Mar 2020'
declare @to datetime = '01 Jun 2020'

Затем я пытаюсь вывести следующие результаты на основе declared@to и @from даты

bookingcode     CycleOccurDate
556789          2020-03-09 00:00:00.000
556789          2020-03-23 00:00:00.000
556789          2020-04-06 00:00:00.000
556789          2020-04-20 00:00:00.000
556789          2020-05-04 00:00:00.000
556789          2020-05-18 00:00:00.000
556790          2020-03-30 00:00:00.000
556790          2020-04-20 00:00:00.000
556790          2020-05-11 00:00:00.000

Так что он работает и в обратном направлении от NextWeekCommDate, если дата @from предшествует этому Спасибо еще раз

Ответы [ 2 ]

2 голосов
/ 25 марта 2020

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

with dates as (
      select convert(date, '2020-01-01') as dte
      union all
      select dateadd(week, 2, dte)
      from cte
      where dte < '2020-03-01'
     )
select *
from dates;

Если это может вернуть более 100 строк, тогда используйте option (maxrecursion 0).

Мне не понятно, что '2020-01-20' имеет отношение к вопросу.

0 голосов
/ 25 марта 2020

Конечно, вы можете добавить непосредственно или вычесть из поля даты

SELECT GETDATE(), GETDATE()-14, GETDATE()+14

или даты

SELECT CAST(GETDATE() AS DATE), CAST(GETDATE()-14 AS DATE), CAST(GETDATE()+14 AS DATE)

Посмотрите на ФУНКЦИИ ДАТЫ в SQLSERVER, их много что вы можете использовать https://docs.microsoft.com/es-es/sql/t-sql/functions/date-and-time-data-types-and-functions-transact-sql?view=sql-server-ver15

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