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

Откуда:
Сообщений: 298
Здравствуйте!
Подскажите, как можно из стринга такого формата:
'201452'
, где первые четыре цифры - это год, оставшиеся две - это номер недели года, получить datetime первого дня недели:

К примеру из
'201452' получить datetime '2014-12-22 00:00:00.000'

из
'201508' получить datetime '2015-02-16 00:00:00.000'

Не получается разложить неделю года на деньмесяц.
20 апр 15, 09:54    [17537701]     Ответить | Цитировать Сообщить модератору
 Re: Получить из год_неделя дату  [new]
Glory
Member

Откуда:
Сообщений: 104760
к дате начала года прибавьте ваше число недель
20 апр 15, 09:58    [17537718]     Ответить | Цитировать Сообщить модератору
 Re: Получить из год_неделя дату  [new]
iap
Member

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

Номер недели может определяться по-разному.
Уточните.
И как определяется первый день недели?
20 апр 15, 10:01    [17537745]     Ответить | Цитировать Сообщить модератору
 Re: Получить из год_неделя дату  [new]
Scend
Member

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

Номер недели может определяться по-разному.
Уточните.
И как определяется первый день недели?

Номер недели по стандартному производственному календарю.
Первый день - понедельник. А первая неполная не с понедельника неделя года - с первого числа этой недели.
20 апр 15, 10:11    [17537800]     Ответить | Цитировать Сообщить модератору
 Re: Получить из год_неделя дату  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Scend
Номер недели по стандартному производственному календарю
Не понимаю, я должен сейчас лезть искать ссылку на "стандартный производственных календарь".
Имеется стандарт нумерации недель - ISO 8601. Но это непохоже на Ваше описание.

https://msdn.microsoft.com/ru-ru/library/ms174420(v=sql.120).aspx

Правильно ли я понимаю, что если 1 января - воскресенье, то 2 января - это уже вторая неделя?
20 апр 15, 10:25    [17537894]     Ответить | Цитировать Сообщить модератору
 Re: Получить из год_неделя дату  [new]
Scend
Member

Откуда:
Сообщений: 298
iap
Правильно ли я понимаю, что если 1 января - воскресенье, то 2 января - это уже вторая неделя?

Да.
20 апр 15, 10:32    [17537936]     Ответить | Цитировать Сообщить модератору
 Re: Получить из год_неделя дату  [new]
o-o
Guest
все правильно, ТС хочет ISO_WEEK.
у меня имеется календарь с датой и просчитанными ISO_WEEK (Calendar.wk),
поэтому для меня решение выглядит так:
declare @t table (dt char(6));
insert into @t values ('201452'), ('201508')

select t.dt, MIN(c.dt)
from dbo.Calendar c join @t t
		on c.dt >= LEFT(t.dt, 4) and c.dt < DATEADD(YY, 1, LEFT(t.dt, 4))
		and wk = cast(right(t.dt, 2) as int)
group by t.dt	
---
201452	2014-12-22
201508	2015-02-16	

ТС-у могу предложить добавить в свой календарь колонку вида YYYYwk,
где wk = ISO_WEEK
20 апр 15, 10:35    [17537968]     Ответить | Цитировать Сообщить модератору
 Re: Получить из год_неделя дату  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
o-o
все правильно, ТС хочет ISO_WEEK
Судя по ответу на мой вопрос - нет!

Scend, версия сервера какая? Выполните PRINT @@VERSION.

DECLARE @S VARCHAR(100)='201452';
SELECT DATEADD(WEEK,RIGHT(@S,2)+DATEDIFF(DAY,0,LEFT(@S,4))/7-1,0);
20 апр 15, 10:44    [17538027]     Ответить | Цитировать Сообщить модератору
 Re: Получить из год_неделя дату  [new]
o-o
Guest
ну, у меня посчитаны именно ISO_WEEK, + ответ сходится.
а если прибавлять просто недели по совету Глори,
то ответ не тот.
если у нас с ТС сходятся первые дни недели, то спасибо, сходится и полностью неделя,
а значит, ему надо именно ISO_WEEK.
20 апр 15, 10:54    [17538080]     Ответить | Цитировать Сообщить модератору
 Re: Получить из год_неделя дату  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
o-o
ну, у меня посчитаны именно ISO_WEEK, + ответ сходится.
а если прибавлять просто недели по совету Глори,
то ответ не тот.
если у нас с ТС сходятся первые дни недели, то спасибо, сходится и полностью неделя,
а значит, ему надо именно ISO_WEEK.
Вот, я как-то пытался собрать все факты про ISO 8601:
Формат ДАТЫ в SQL.

Первая неделя по этому стандарту - это та, которой принадлежит 4 января!
20 апр 15, 11:10    [17538173]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить