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

Откуда:
Сообщений: 63
Здравствуйте,
помогите, пожалуйста с определением даты последнего дня недели по номеру недели и году (ISO).
Здесь на форуме (https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=768806&msg=8977681) был код,
который у меня не работает для 53й недели 2015 года:

DECLARE @wk TINYINT, @yr CHAR(4);
SELECT @wk=53, @yr='2015';
SELECT DATEADD(DAY, DATEDIFF(DAY,0,@yr)/7*7+@wk*7+6,0);


возвращает
2016-01-10 00:00:00.000
14 янв 16, 13:34    [18678085]     Ответить | Цитировать Сообщить модератору
 Re: Последняя день в неделе по номеру ISO недели и году  [new]
iap
Member

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

версия сервера какая?
14 янв 16, 13:35    [18678099]     Ответить | Цитировать Сообщить модератору
 Re: Последняя день в неделе по номеру ISO недели и году  [new]
iap
Member

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

по приведённой ссылке речь о номере недели ISO не идёт.
14 янв 16, 13:37    [18678112]     Ответить | Цитировать Сообщить модератору
 Re: Последняя день в неделе по номеру ISO недели и году  [new]
jenta
Member

Откуда:
Сообщений: 63
iap,
спасибо за ответ!
у меня Microsoft SQL Server 2008 R2 (SP1)
14 янв 16, 13:48    [18678263]     Ответить | Цитировать Сообщить модератору
 Re: Последняя день в неделе по номеру ISO недели и году  [new]
jenta
Member

Откуда:
Сообщений: 63
iap,
тогда такая поправка будет работать?
исходя из предположения, что 4 января всегда в 1й неделе года?

DECLARE @wk TINYINT, @yr CHAR(4);
SELECT @wk=53, @yr='2015';
SELECT DATEADD(DAY, DATEDIFF(DAY,4,@yr)/7*7 + @wk*7+6,0);
14 янв 16, 13:53    [18678303]     Ответить | Цитировать Сообщить модератору
 Re: Последняя день в неделе по номеру ISO недели и году  [new]
iap
Member

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

ISO_WEEK
Формат ДАТЫ в SQL.
14 янв 16, 13:59    [18678338]     Ответить | Цитировать Сообщить модератору
 Re: Последняя день в неделе по номеру ISO недели и году  [new]
iap
Member

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

DECLARE @wk TINYINT=52, @yr CHAR(4)='2016';
SELECT DATEADD(WEEK,@wk-1,DATEADD(DAY,7-(@@DATEFIRST+DATEPART(WEEKDAY,@yr+'0104')-1)%7,@yr+'0104'));
???

В 2016 году 52 недели ISO.
53-я на самом деле - первая в 2017 году.
14 янв 16, 14:17    [18678481]     Ответить | Цитировать Сообщить модератору
 Re: Последняя день в неделе по номеру ISO недели и году  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Так покороче:
DECLARE @wk TINYINT=52, @yr CHAR(4)='2016';
SELECT DATEADD(DAY,7*@wk-(@@DATEFIRST+DATEPART(WEEKDAY,@yr+'0104')-1)%7,@yr+'0104');
14 янв 16, 14:21    [18678520]     Ответить | Цитировать Сообщить модератору
 Re: Последняя день в неделе по номеру ISO недели и году  [new]
jenta
Member

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

большое спасибо!
14 янв 16, 15:27    [18678998]     Ответить | Цитировать Сообщить модератору
 Re: Последняя день в неделе по номеру ISO недели и году  [new]
jenta
Member

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

но впрочем для 2015 года
DECLARE @wk TINYINT=52, @yr CHAR(4)='2015';
SELECT DATEADD(DAY,7*@wk-(@@DATEFIRST+DATEPART(WEEKDAY,@yr+'0104')-1)%7,@yr+'0104');

выдает неправильный результат..
2016-01-03 00:00:00.000


52я неделя в 2015 заканчивалась 27 декабря
14 янв 16, 15:51    [18679162]     Ответить | Цитировать Сообщить модератору
 Re: Последняя день в неделе по номеру ISO недели и году  [new]
iap
Member

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

но впрочем для 2015 года
DECLARE @wk TINYINT=52, @yr CHAR(4)='2015';
SELECT DATEADD(DAY,7*@wk-(@@DATEFIRST+DATEPART(WEEKDAY,@yr+'0104')-1)%7,@yr+'0104');


выдает неправильный результат..
2016-01-03 00:00:00.000



52я неделя в 2015 заканчивалась 27 декабря
DECLARE @wk TINYINT=52, @yr CHAR(4)='2015';
SELECT DATEADD(DAY,7*@wk-1-(@@DATEFIRST+DATEPART(WEEKDAY,@yr+'0104')-2)%7,@yr+'0104');
14 янв 16, 17:21    [18679717]     Ответить | Цитировать Сообщить модератору
 Re: Последняя день в неделе по номеру ISO недели и году  [new]
jenta
Member

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

ура! спасибо за ваше время и терпение :)
14 янв 16, 17:33    [18679807]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить