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

Откуда: Кострома
Сообщений: 146
Добрый вечер!
Помогите, пожалуйста, подготовить скрипт. Есть дата в текущем году. Нужно вывести номер недели текущего года, в которую попадает эта дата, и первое и последнее числа недели. Неделя начинается с понедельника.
23 авг 16, 21:34    [19581397]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Определить номер недели  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
declare @dt datetime = getdate()

select datepart(week,@dt) week_number,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt) week_start,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt)+6 week_end
23 авг 16, 21:51    [19581474]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Определить номер недели  [new]
o-o
Guest
3unknown
declare @dt datetime = getdate()

select datepart(week,@dt) week_number,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt) week_start,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt)+6 week_end

а если текущая дата это первое число сего года,
странноватое начало первой недели получается, не?
declare @dt datetime = '20160101'--getdate()
select datepart(week,@dt) week_number,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt) week_start,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt)+6 week_end
---
week_number	week_start	week_end
1	2015-12-28 00:00:00.000	2016-01-03 00:00:00.000
23 авг 16, 23:17    [19581868]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Определить номер недели  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
Чем странноватое, понедельник же.:)
23 авг 16, 23:21    [19581880]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Определить номер недели  [new]
o-o
Guest
"понедельник начинается в субботу"?
в смысле, первая неделя года начинается в том году?
у меня бы не хватило духу песледней неделе года присвоить номер один
23 авг 16, 23:46    [19581978]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Определить номер недели  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
Это все условности, на усмотрение заказчика. А когда первая неделя года должна начинаться? Можно обработать это по желанию.
23 авг 16, 23:55    [19582012]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Определить номер недели  [new]
o-o
Guest
3unknown
А когда первая неделя года должна начинаться?

ну, у меня как-то все стандартно ISO week date standard (ISO-8601)
но может вы американец или мусульманин, вам виднее
24 авг 16, 00:07    [19582052]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Определить номер недели  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
Так у меня с понедельника начинается. Как положено.
24 авг 16, 00:11    [19582075]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Определить номер недели  [new]
o-o
Guest
3unknown
Так у меня с понедельника начинается. Как положено.

Нет не как положено,
У вас первая неделя года начинается В ПРОШЛОМ ГОДУ,
если на сайте не видите, вот картинкой, строку смотрите, которая wk. 01

Ваш код неконсистентный,
Вторая его часть утверждает, что первая неделя года 2016 начинается 20151228,
Пусть этосоответствует вашей религии,
Но ваш же код выдает на эту дату
select datepart(week, '20151228') -- 53
Дата одна, а номеров недели две

К сообщению приложен файл. Размер - 95Kb
24 авг 16, 07:59    [19582452]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Определить номер недели  [new]
SvElena
Member

Откуда:
Сообщений: 21
3unknown
declare @dt datetime = getdate()

select datepart(week,@dt) week_number,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt) week_start,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt)+6 week_end

вот так
declare @dt datetime = getdate()

select datepart(week,@dt-1) week_number,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt) week_start,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt)+6 week_end
30 авг 16, 16:39    [19608362]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Определить номер недели  [new]
o-o
Guest
SvElena
вот так
declare @dt datetime = getdate()

select datepart(week,@dt-1) week_number,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt) week_start,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt)+6 week_end

у вас с неделей 2015-12-28..2016-01-03 тоже непонятки.
то она первая, то 53-я,
то 20160104 уже вторая неделя
declare @dt datetime = '20160101'
select datepart(week,@dt-1) week_number,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt) week_start,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt)+6 week_end
go

declare @dt datetime = '20160102'
select datepart(week,@dt-1) week_number,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt) week_start,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt)+6 week_end
go

declare @dt datetime = '20160104'
select datepart(week,@dt-1) week_number,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt) week_start,DATEADD(DAY, 2-DATEPART(WEEKDAY, @dt), @dt)+6 week_end
go

week_number	week_start	week_end
53	2015-12-28 00:00:00.000	2016-01-03 00:00:00.000
1	2015-12-28 00:00:00.000	2016-01-03 00:00:00.000
2	2016-01-04 00:00:00.000	2016-01-10 00:00:00.000
30 авг 16, 16:46    [19608407]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить