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



допустим сегодня : 21-09-2005 принадлежит какой неделе в сентябре?
21 сен 05, 23:02    [1900027]     Ответить | Цитировать Сообщить модератору
 Re: как узнать номер недели в месяце  [new]
olya_33
Guest
nashla :


declare @d datetime
set @d=convert(char(8),getdate(),112)
select '№ недели в месяце',(day(@d)+datepart(weekday,dateadd(day,1-day(@d),@d))-datepart(weekday,@d))/7+1
21 сен 05, 23:34    [1900044]     Ответить | Цитировать Сообщить модератору
 Re: как узнать номер недели в месяце  [new]
LISSY
Member

Откуда:
Сообщений: 19
Баловство, конечно, но мне нравится...
if object_id ('tempdb..#w') is not null drop table #w
--//-----------------------------------------------------------------------------------------
declare @bdate datetime, @edate datetime, @b_date datetime, @e_date datetime, @nd int,
        @note varchar (64), @MyDog varchar (8000), @nday int, @nweek int, 
        @tday varchar (3), @tc varchar (3), @datesettings int, @langsettings varchar (16)
--//-----------------------------------------------------------------------------------------
select @bdate = '20050101', @edate = '20051231', 
       @datesettings = @@datefirst, @langsettings = @@language
set datefirst 1
set language russian
--//-----------------------------------------------------------------------------------------
create table #w 
(
  [Примечание] varchar (64) null, [Неделя] int null,
  [Пн.] varchar (8) null, [Вт.] varchar (8) null,
  [Ср.] varchar (8) null, [Чт.] varchar (8) null,
  [Пт.] varchar (8) null, [Сб.] varchar (8) null,
  [Вс.] varchar (8) null,
)
--//-----------------------------------------------------------------------------------------
select @b_date = dateadd (day, 1, dateadd (day, - datepart (day, @bdate), @bdate))
select @e_date = dateadd (month, 1, @edate)
select @e_date = dateadd (day, - datepart (day, @e_date), @e_date)
select @nd = datediff (day, @b_date, @e_date)
--//-----------------------------------------------------------------------------------------
while @nd >= 0
begin
   select @nday = datepart (weekday, @b_date), @nweek = datepart (week, @b_date)
   select @note = datename (month, @b_date) + ' ' + convert (char (4), year (@b_date))
   if not exists 
   (
     select * from #w where [Примечание] = @note and [Неделя] = @nweek
   )
   insert into #w select [Примечание] = @note, @nweek as [Неделя], 
               '', '', '', '', '', '', ''
   select @tday = case when @nday = 1 then 'Пн.' when @nday = 2 then 'Вт.'
                       when @nday = 3 then 'Ср.' when @nday = 4 then 'Чт.'
                       when @nday = 5 then 'Пт.' when @nday = 6 then 'Сб.'
                       when @nday = 7 then 'Вс.' else null
                  end,
          @tc = case when @b_date between @bdate and @edate 
                     then convert (varchar (3), datepart (day, @b_date))
                     else ' '
                end
   select @MyDog = 
   'update #w set [' + @tday + '] = ' + char(39) + @tc + char(39) + 
   ' where [Примечание] = ' + char (39) + @note + char (39) +
   ' and [Неделя] = ' + convert (varchar (3), @nweek)
   exec (@MyDog)
   select @nd = @nd - 1, @b_date = dateadd (day, 1, @b_date)
end
--//-----------------------------------------------------------------------------------------
select * from #w
--//-----------------------------------------------------------------------------------------
if object_id ('tempdb..#w') is not null drop table #w
--//-----------------------------------------------------------------------------------------
set datefirst @datesettings
set language @langsettings
22 сен 05, 07:25    [1900194]     Ответить | Цитировать Сообщить модератору
 Re: как узнать номер недели в месяце  [new]
Брюлик
Member

Откуда:
Сообщений: 690
CREATE FUNCTION dbo.WeekOfMonth(@now_day DATETIME)
RETURNS INT
AS
BEGIN
RETURN DATEPART(week, @now_day)
- DATEPART(week, CONVERT(CHAR(6), @now_day, 112)+'01')
+ 1
END
22 сен 05, 08:32    [1900273]     Ответить | Цитировать Сообщить модератору
 Re: как узнать номер недели в месяце  [new]
Проходимец
Member

Откуда: Москва
Сообщений: 571
select datepart(day, getdate()) / 7 + 1
22 сен 05, 09:03    [1900329]     Ответить | Цитировать Сообщить модератору
 Re: как узнать номер недели в месяце  [new]
Проходимец
Member

Откуда: Москва
Сообщений: 571
Проходимец
select datepart(day, getdate()) / 7 + 1

Неверно :D Погорячился :D
22 сен 05, 09:05    [1900334]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: как узнать номер недели в месяце  [new]
LestatKim
Member

Откуда: Saint-Petersburg
Сообщений: 2
CEILING(DATEPART(DAY, @Date) / 7.0)
16 апр 18, 16:51    [21342986]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить