Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Надо посчитать сколько дней входит в каждый месяц из периода дат  [new]
Коля77
Member

Откуда:
Сообщений: 84
Есть таблица с месяцами и есть два значения (как пример)
значение1 период с 10.2.2012 по 13.3.2012
значение2 период с 22.2.2012 по 10.4.2012
Надо посчитать сколько дней входит в каждый месяц из периода дат.

Что-то не могу сообразить как это сделать

SET LANGUAGE Russian

DECLARE @t TABLE ([Date] int) DECLARE @dt1 int, @dt2 int
select @dt1 = 1 , @dt2 = 12

	WHILE @dt1 <= @dt2 BEGIN
	INSERT INTO @t
	SELECT    @dt1
	SET       @dt1 =  @dt1+1 
	END
DECLARE @t1 TABLE (Start smalldatetime, Fin smalldatetime) 

insert into @t1

select '10.2.2012','13.3.2012' union all
select '22.2.2012','10.4.2012'

select * 
from @t full join @t1 on DATEPART(Month, Start) = [date] or DATEPART(Month, fin) = [date]

Dateзначения1значения2Дней
1nullnull
220828
3133144
4null1010
5nullnull
6nullnull
7nullnull
8nullnull
9nullnull
10nullnull
11nullnull
12nullnull
17 апр 12, 18:34    [12429420]     Ответить | Цитировать Сообщить модератору
 Re: Надо посчитать сколько дней входит в каждый месяц из периода дат  [new]
iljy
Member

Откуда:
Сообщений: 8711
Коля77,

DECLARE @t1 TABLE (Start smalldatetime, Fin smalldatetime) 
set dateformat dmy
insert into @t1
select '10.2.2012','13.3.2012' union all
select '22.2.2012','10.4.2012'

select Start, Fin, m1, DATEDIFF(d, case when Start > m1 then Start else m1 end, case when Fin < m2 then Fin else m2 end) + 1 days
from(
	select t1.*, DATEADD(m,number,0) m1, DATEADD(m,number+1,-1) m2	
	from @t1 t1 join  master..spt_values v on v.number between DATEDIFF(m,0, Start) and DATEDIFF(m, 0, Fin)
	where type = 'P'
)t
17 апр 12, 19:10    [12429530]     Ответить | Цитировать Сообщить модератору
 Re: Надо посчитать сколько дней входит в каждый месяц из периода дат  [new]
Коля77
Member

Откуда:
Сообщений: 84
Под sql 2000 запускаю код не выдает ошибки но результата нет
Извините что не указал какой сервер :(.
18 апр 12, 11:37    [12432000]     Ответить | Цитировать Сообщить модератору
 Re: Надо посчитать сколько дней входит в каждый месяц из периода дат  [new]
iljy
Member

Откуда:
Сообщений: 8711
Коля77,

в 2000 в таблице spt_values очень мало значений. Создайте свою таблицу чисел и используйте ее.
18 апр 12, 11:45    [12432072]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить