Помощь в создании финансового периода 12 периодов - PullRequest
0 голосов
/ 19 августа 2010

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

Ввод: июнь 2010

Результаты желаемых 12 периодов с даты начала июня 2010 года - май-2011

Период ............... .start .............................. .... ......... ..End 1 ... ... .................. 1-06-2010 ................................. 30.06.2010 2 .......... 1-07-2010 ........... 31.07.2010

И так до мая 2010 года… На самом деле нужно получить 12 строк (12 месяцев), начиная с любого месяца, и выходными данными будет дата начала месяца, а концом будет последний день месяца, как, например, в моем сценарии Июнь 2010 - май 2011 .. какой будет запрос.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 20 августа 2010

Вот метод, использующий общее табличное выражение для создания списка периодов.Я заимствую подход @ Fosco DATEADD (thx @Fosco).

DECLARE @StartDate DATETIME = '06/1/2010';

WITH periods AS
    (SELECT 1 AS period
    UNION SELECT 2
    UNION SELECT 3
    UNION SELECT 4
    UNION SELECT 5
    UNION SELECT 6
    UNION SELECT 7
    UNION SELECT 8
    UNION SELECT 9
    UNION SELECT 10
    UNION SELECT 11
    UNION SELECT 12
    )

SELECT period,
    DATEADD(month,period-1,@StartDate) as startDate,
    DATEADD(day,-1,DATEADD(month,period,@StartDate)) as endDate
FROM periods

Существует несколько способов создания списка периодов.См. this для примеров.

1 голос
/ 19 августа 2010

См. DATEADD()

select convert(datetime,'6/1/2010')

select DATEADD(day,-1,DATEADD(month,1,convert(datetime,'6/1/2010')))   --6/30/2010

select DATEADD(month,1,convert(datetime,'6/1/2010'))   --7/1/2010

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

Я не решаюсь сделать все для тебя, но что за сено ...

create procedure getFiscalYear
  @startDate nvarchar(10)
as begin

declare @myDate datetime
set @myDate = convert(datetime,@startDate)

select 1 as Period, @myDate as startDate, DATEADD(day,-1,DATEADD(month,1,@myDate)) as endDate
union
select 2 as Period, DATEADD(month,1,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,2,@myDate)) as endDate
union
select 3 as Period, DATEADD(month,2,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,3,@myDate)) as endDate
union
select 4 as Period, DATEADD(month,3,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,4,@myDate)) as endDate
union
select 5 as Period, DATEADD(month,4,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,5,@myDate)) as endDate
union
select 6 as Period, DATEADD(month,5,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,6,@myDate)) as endDate
union
select 7 as Period, DATEADD(month,6,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,7,@myDate)) as endDate
union
select 8 as Period, DATEADD(month,7,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,8,@myDate)) as endDate
union
select 9 as Period, DATEADD(month,8,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,9,@myDate)) as endDate
union
select 10 as Period, DATEADD(month,9,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,10,@myDate)) as endDate
union
select 11 as Period, DATEADD(month,10,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,11,@myDate)) as endDate
union
select 12 as Period, DATEADD(month,11,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,12,@myDate)) as endDate

end

это безобразный способ ...

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