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

Откуда: Астана
Сообщений: 20
Подскажите, пожалуйста, как мне достать второй, третий и четвертый понедельник текущего месяца. как правильно сформировать запрос. Заранее спасибо.
ЗЫ. 1 понедельник уже есть)
10 авг 12, 14:31    [12993935]     Ответить | Цитировать Сообщить модератору
 Re: Второй понедельник месяца  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5123
tramm09
ЗЫ. 1 понедельник уже есть)
добавить к нему 7 дней
10 авг 12, 14:37    [12994010]     Ответить | Цитировать Сообщить модератору
 Re: Второй понедельник месяца  [new]
tramm09
Member

Откуда: Астана
Сообщений: 20
Дедушка
tramm09
ЗЫ. 1 понедельник уже есть)
добавить к нему 7 дней


а как?
10 авг 12, 15:00    [12994244]     Ответить | Цитировать Сообщить модератору
 Re: Второй понедельник месяца  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
tramm09,

Некоторые вычисления с датой
10 авг 12, 15:12    [12994346]     Ответить | Цитировать Сообщить модератору
 Re: Второй понедельник месяца  [new]
tramm09
Member

Откуда: Астана
Сообщений: 20
вот отсюда я и брал 1 понедельник) (по 1 воскресенью) а как второй?)
10 авг 12, 15:17    [12994378]     Ответить | Цитировать Сообщить модератору
 Re: Второй понедельник месяца  [new]
tramm09
Member

Откуда: Астана
Сообщений: 20
всё, кажись разобрался)) спс)
10 авг 12, 15:33    [12994545]     Ответить | Цитировать Сообщить модератору
 Re: Второй понедельник месяца  [new]
Бородин Андрей
Member

Откуда:
Сообщений: 4
set datefirst 1

declare @t table(
dDate datetime not null
,[year] int not null
,[month] int not null
,id int identity
,primary key clustered([year], [month], id)
)

;with cte(lvl)
as (
select 0 as lvl
union all
select lvl + 1 from cte
where lvl < 100
)


insert @t(dDate, [year], [month])
select
CONVERT(datetime, '2012-08-01', 120) + lvl
,DATEPART(YEAR, CONVERT(datetime, '2012-08-01', 120) + lvl)
,DATEPART(month, CONVERT(datetime, '2012-08-01', 120) + lvl)
from cte
where datepart(weekday, CONVERT(datetime, '2012-08-01', 120) + lvl) = 1


select t.dDate, t.year, t.month from @t t
outer apply (
select dDate from @t flt
where t.year = flt.year
and t.month = flt.month
and t.dDate >= flt.dDate
) flt
group by t.dDate, t.year, t.month
having count(*) = 2
10 авг 12, 16:35    [12995012]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить