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

Откуда:
Сообщений: 1574
подскажите, плиз., как написать запрос, чтоб он мне выдал такие данные
дата, номер недели в году, номер недели в месяце.

типа такого
01-12-2011, 48, 1
11 янв 12, 13:35    [11884726]     Ответить | Цитировать Сообщить модератору
 Re: календарь-запрос  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
getdate() + datepart()
11 янв 12, 13:36    [11884732]     Ответить | Цитировать Сообщить модератору
 Re: календарь-запрос  [new]
dimakz
Member

Откуда:
Сообщений: 1574
я хотел сказать как мне сформировать на весь год
такой календарь?
01-12-2011, 48, 1
11 янв 12, 13:52    [11884915]     Ответить | Цитировать Сообщить модератору
 Re: календарь-запрос  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
dimakz,

with t as (select d = dateadd(dd, (row_number() over(order by (select 1)))-1, '20120101') from master..spt_values)
select * from t where year(d)=2012;

+
FAQ:Некоторые вычисления с датой
11 янв 12, 14:07    [11885136]     Ответить | Цитировать Сообщить модератору
 Re: календарь-запрос  [new]
iap
Member

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

надо уточнять, какой номер недели имеется в виду
11 янв 12, 15:15    [11885788]     Ответить | Цитировать Сообщить модератору
 Re: календарь-запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
dimakz,

надо уточнять, какой номер недели имеется в виду
И какая версия сервера
11 янв 12, 15:21    [11885859]     Ответить | Цитировать Сообщить модератору
 Re: календарь-запрос  [new]
dimakz
Member

Откуда:
Сообщений: 1574
set nocount on;
declare @d datetime;
set @d='2011-12-01';

with t as (select dat = dateadd(dd, (row_number() over(order by (select 1)))-1,  @d) from master..spt_values)
select * from t where year(dat)=2011;


это дает мне даты в декабре

а этот
select
 case 0
  when datediff(week, dateadd(year,-1, datename(year,@d)+'1227'), dateadd(day,-1,@d))
  then datediff(week, dateadd(year,-1, datename(year,@d)+'0103'), dateadd(year,-1, datename(year,@d)+'1227'))
  when datediff(week, dateadd(year, 1, datename(year,@d)+'0103'), dateadd(day,-1,@d))
  then 0
  else datediff(week, datename(year,@d)+'0103', dateadd(day,-1,@d))
 end+1 as num_nedela;
go


даст неделю в году, как мне запихнуть тут в @d - декабрьские даты кот. вышли в первом запросе?
11 янв 12, 15:31    [11885966]     Ответить | Цитировать Сообщить модератору
 Re: календарь-запрос  [new]
dimakz
Member

Откуда:
Сообщений: 1574
2008 сервер,

номер недели в месяце,
например 01/12/2011 - это первая неделя в месяце,
05/12/2011 - это вторая неделя в месяце,
11 янв 12, 15:36    [11886017]     Ответить | Цитировать Сообщить модератору
 Re: календарь-запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
dimakz
2008 сервер,

номер недели в месяце,
например 01/12/2011 - это первая неделя в месяце,
05/12/2011 - это вторая неделя в месяце,
Тут ведь какое дело...
Есть номер недели года по стандарту ISO 8601,
а есть номер недели года в зависимости от того, с какого дня неделя начинается.
Вот, американцы почему-то считают, что с воскресенья!

Так что вопрос остался открытым
11 янв 12, 15:45    [11886112]     Ответить | Цитировать Сообщить модератору
 Re: календарь-запрос  [new]
dimakz
Member

Откуда:
Сообщений: 1574
мне нужно это

номер недели года в зависимости от того, с какого дня неделя начинается.
нужно чтоб считался с понедельника
11 янв 12, 15:56    [11886221]     Ответить | Цитировать Сообщить модератору
 Re: календарь-запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
DECLARE @Y CHAR(4)='2012';
SELECT
 [Дата]=CONVERT(CHAR(10),DATEADD(DAY,number,@Y),104)
,[День недели]=1+DATEDIFF(DAY,0,DATEADD(DAY,number,@Y))%7
,[Номер недели в году]=1+DATEDIFF(DAY,0,DATEADD(DAY,number,@Y))/7-DATEDIFF(DAY,0,@Y)/7
,[Номер недели в месяце]=1+DATEDIFF(DAY,0,DATEADD(DAY,number,@Y))/7-DATEDIFF(DAY,0,DATEADD(DAY,1-DAY(DATEADD(DAY,number,@Y)),DATEADD(DAY,number,@Y)))/7
FROM master.dbo.spt_values
WHERE type='P' AND number<DATEDIFF(DAY,@Y,DATEADD(YEAR,1,@Y));
11 янв 12, 17:26    [11887231]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить