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

Откуда: Calgary, Canada
Сообщений: 219
Добрай день всем. Мне тут понадобилось запрос написать с проверкой на дату которая между первым воскресением арпеля и последним воскресением октября. Вот думаю, как подступится. Может кто уже делал подобное? Поделитесь опытом
26 сен 02, 02:22    [57824]     Ответить | Цитировать Сообщить модератору
 Re: первое воскресение месяца / последнее воскресение месяца  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145702
А зачем подступатся-то? Решать надо.
declare @m char(2),@y char(4)

select @m='9', @y='2002' -- 9 месяц, 2002 год

--Первое воскресенье месяца

select dateadd(d,
datepart(dw,convert(datetime,@m+'/1/'+@y,101))-1,
convert(datetime,@m+'/1/'+@y,101))
--Последнее воскресенье месяца

select dateadd(d,
datepart(dw,dateadd(m,1,convert(datetime,@m+'/1/'+@y,101)))-1,
dateadd(m,1,convert(datetime,@m+'/1/'+@y,101)))-7
26 сен 02, 08:13    [57834]     Ответить | Цитировать Сообщить модератору
 Re: первое воскресение месяца / последнее воскресение месяца  [new]
SM
Member

Откуда: Calgary, Canada
Сообщений: 219
Для сентября в результате получается 5 августа и 25 августа - что не совсем верно. Но смысл понятен, спасибо, буду ковырятся.
26 сен 02, 19:16    [58176]     Ответить | Цитировать Сообщить модератору
 Re: первое воскресение месяца / последнее воскресение месяца  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145702
А Вы точно уверены, что август ВОСЬМОЙ месяц?
26 сен 02, 20:07    [58185]     Ответить | Цитировать Сообщить модератору
 Re: первое воскресение месяца / последнее воскресение месяца  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145702
Что-то я спрсонья и сразу после работы туго соображал
declare @i int

declare @m char(2),@y char(4)
set @y='2002'

set nocount on
SET DATEFIRST 1
set @i=1
while @i <=12
begin
set @m=convert(char(2),@i)
select @i, dateadd(d,
--Первое воскресенье месяца

7-datepart(dw,convert(datetime,@m+'/1/'+@y,101)),
convert(datetime,@m+'/1/'+@y,101))
--Последнее воскресенье месяца

, dateadd(d,
7-datepart(dw,dateadd(m,1,convert(datetime,@m+'/1/'+@y,101))),
dateadd(m,1,convert(datetime,@m+'/1/'+@y,101)))-7
set @i=@i+1
end
26 сен 02, 20:58    [58199]     Ответить | Цитировать Сообщить модератору
 Re: первое воскресение месяца / последнее воскресение месяца  [new]
SM
Member

Откуда: Calgary, Canada
Сообщений: 219
>Для сентября в результате получается 5 августа и 25
>августа

Опечатка. Конечно же для августа :-)

вот что получилось у меня

declare @m char(2),@y char(4)

select @y='2002'

select @m='8'
DECLARE @firstWDay int
SET @firstWDay=datepart(dw,convert(datetime,@m+'/1/'+@y,101))

DECLARE @FirstSunDay datetime
SET @FirstSunDay=dateadd(d,
CASE @firstWDay WHEN 1 THEN 0 ELSE 7-@firstWDay+1 END,
convert(datetime,@m+'/1/'+@y,101))

DECLARE @lastWDay int
SET @lastWDay=datepart(dw,dateadd(d,-1,dateadd(m,1, convert(datetime,@m+'/1/'+@y,101))))

DECLARE @lastSunDay datetime
SET @lastSunDay=dateadd(d,
CASE @lastWDay WHEN 1 THEN 0 ELSE -1 * @lastWDay + 1 END,
dateadd(d,-1,dateadd(m,1, convert(datetime,@m+'/1/'+@y,101)))
)
SELECT @y, @FirstSunDay, @lastSunDay
26 сен 02, 21:02    [58200]     Ответить | Цитировать Сообщить модератору
 Re: первое воскресение месяца / последнее воскресение месяца  [new]
SM
Member

Откуда: Calgary, Canada
Сообщений: 219
Да, то же самое в итоге. Спасибо.
26 сен 02, 21:12    [58202]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: первое воскресение месяца / последнее воскресение месяца  [new]
NaM-Cat
Member

Откуда:
Сообщений: 7
Последнее воскресенье месяца:

select dateadd(day,-datepart(weekday,eomonth('20160805')),eomonth('20160805'))

(PS: при @@language = русский)
5 авг 16, 13:58    [19505464]     Ответить | Цитировать Сообщить модератору
 Re: первое воскресение месяца / последнее воскресение месяца  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
NaM-Cat,

лучше календарь на 100 лет.
5 авг 16, 15:05    [19506005]     Ответить | Цитировать Сообщить модератору
 Re: первое воскресение месяца  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
NaM-Cat,

а чем FAQ не устроил?
Без всяких там @@language ...
5 авг 16, 15:25    [19506156]     Ответить | Цитировать Сообщить модератору
 Re: первое воскресение месяца / последнее воскресение месяца  [new]
NaM-Cat
Member

Откуда:
Сообщений: 7
iap,

Подходит. Явно вариант не хуже, универсальнее. Кроме одного - предложенный мной короче.
16 сен 16, 07:40    [19671390]     Ответить | Цитировать Сообщить модератору
 Re: первое воскресение месяца / последнее воскресение месяца  [new]
o-o
Guest
NaM-Cat
iap,

Подходит. Явно вариант не хуже, универсальнее. Кроме одного - предложенный мной короче.

Предложенный вами ограничен версией сервера.
16 сен 16, 08:51    [19671544]     Ответить | Цитировать Сообщить модератору
 Re: первое воскресение месяца  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
NaM-Cat
Подходит. Явно вариант не хуже, универсальнее. Кроме одного - предложенный мной короче.

у вас прозрение настало ? И вы решили ответить в топик которому 14 лет ?
16 сен 16, 09:39    [19671746]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить