powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Узнать начало недели по её номеру
20 сообщений из 20, страница 1 из 1
Узнать начало недели по её номеру
    #38808622
Слонъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые, я немного запутался... Понимаю, как получить номер недели, но как получить по номеру недели дату начала недели - никак не могу понять.
Например, номер недели в этом году: 33, начало недели должно быть 2014-08-11.
Подскажите, будьте добры, как выразить это одним select-ом?
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38808629
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слонъ,

Код: sql
1.
select DATEADD(week, 32, '20140101') - 2
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38808634
Слонъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WarAnt , ну а как быть в следующем году? А через год? Каждый раз скрипт править?..
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38808641
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слонъ WarAnt , ну а как быть в следующем году? А через год? Каждый раз скрипт править?..\

Вот вы ленивые пошли все:)

Код: sql
1.
select DATEADD(week, 32, '2014') - (datepart(dw, DATEADD(week, 32, '2014')) - 1)



Год надеюсь сможете сами 2015 поставить;)
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38808673
Слонъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С константами не пройдёт. Требуется чтобы результат не зависел от года, указанного в запросе и брался всегда текущий год.
Попробовал год заменить на DATEPART(year, GETDATE()) - вообще не так работает, как если бы год в кавычках указать. Видимо, оно считает значение как int, а не как date
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38808681
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СлонъС константами не пройдёт. Требуется чтобы результат не зависел от года, указанного в запросе и брался всегда текущий год.
Попробовал год заменить на DATEPART(year, GETDATE()) - вообще не так работает, как если бы год в кавычках указать. Видимо, оно считает значение как int, а не как date
а что вам мешает сделать еще одно действие и получить из целого значения номера года дату начала года?
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38808694
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShakillСлонъС константами не пройдёт. Требуется чтобы результат не зависел от года, указанного в запросе и брался всегда текущий год.
Попробовал год заменить на DATEPART(year, GETDATE()) - вообще не так работает, как если бы год в кавычках указать. Видимо, оно считает значение как int, а не как date
а что вам мешает сделать еще одно действие и получить из целого значения номера года дату начала года?

Я уже выше написал что мешает:)

авторС константами не пройдёт. Требуется чтобы результат не зависел от года, указанного в запросе и брался всегда текущий год.
Попробовал год заменить на DATEPART(year, GETDATE()) - вообще не так работает, как если бы год в кавычках указать. Видимо, оно считает значение как int, а не как date

эх
Код: sql
1.
select DATEADD(week, 32, convert(varchar(4), datepart(year, getdate()))) - (datepart(dw, DATEADD(week, 32, convert(varchar(4), datepart(year, getdate())))) - 1)
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38808700
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СлонъС константами не пройдёт. Требуется чтобы результат не зависел от года, указанного в запросе и брался всегда текущий год.
Попробовал год заменить на DATEPART(year, GETDATE()) - вообще не так работает, как если бы год в кавычках указать. Видимо, оно считает значение как int, а не как date

Ну и так для общего развития, дата это и есть int, а точнее число дней от даты в зависимости от того какой из типов datetime вы используете. Поэтому если вы преобразовываете int в дату то и получаете 2014`й день от ...
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38808707
Слонъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, в общем-то сделал похожим образом, спасибо за помощь! У меня получилось так:
Код: sql
1.
select DATEADD(week, 1, cast(DATEPART(year, GETDATE()) as varchar)) - (datepart(dw, DATEADD(week, 1, cast (DATEPART(year, GETDATE()) as varchar))) - 2)
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38808735
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
кто в лес, кто по дрова
но главное, что все довольны
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
declare @w int = 33; 

set language russian;

select DATEADD(week, @w, convert(varchar(4), datepart(year, getdate()))) - 
      (datepart(dw, DATEADD(week, @w, convert(varchar(4), datepart(year, getdate())))) - 1) as [WarAnt's 1st date RUS],
       datename(dw, DATEADD(week, @w, convert(varchar(4), datepart(year, getdate()))) - 
      (datepart(dw, DATEADD(week, @w, convert(varchar(4), datepart(year, getdate())))) - 1)) as [WarAnt's 1st day of week RUS],
       
       DATEADD(week, @w, cast(DATEPART(year, GETDATE()) as varchar)) - 
      (datepart(dw, DATEADD(week, @w, cast (DATEPART(year, GETDATE()) as varchar))) - 2) as [Слонъ's 1st date RUS],  
       datename(dw, DATEADD(week, @w, cast(DATEPART(year, GETDATE()) as varchar)) - 
      (datepart(dw, DATEADD(week, @w, cast (DATEPART(year, GETDATE()) as varchar))) - 2))as [Слонъ's 1st day of week RUS]
      
set language us_english;

select DATEADD(week, @w, convert(varchar(4), datepart(year, getdate()))) - 
      (datepart(dw, DATEADD(week, @w, convert(varchar(4), datepart(year, getdate())))) - 1) as [WarAnt's 1st date ENG],
       datename(dw, DATEADD(week, @w, convert(varchar(4), datepart(year, getdate()))) - 
      (datepart(dw, DATEADD(week, @w, convert(varchar(4), datepart(year, getdate())))) - 1)) as [WarAnt's 1st day of week ENG],
       
       DATEADD(week, @w, cast(DATEPART(year, GETDATE()) as varchar)) - 
      (datepart(dw, DATEADD(week, @w, cast (DATEPART(year, GETDATE()) as varchar))) - 2) as [WarAnt's 1st date ENG],  
       datename(dw, DATEADD(week, @w, cast(DATEPART(year, GETDATE()) as varchar)) - 
      (datepart(dw, DATEADD(week, @w, cast (DATEPART(year, GETDATE()) as varchar))) - 2))as [Слонъ's 1st day of week ENG]


WarAnt's 1st date RUS WarAnt's 1st day of week RUS Слонъ's 1st date RUS Слонъ's 1st day of week RUS2014-08-18 00:00:00.000 понедельник 2014-08-19 00:00:00.000 вторник
WarAnt's 1st date ENG WarAnt's 1st day of week ENG WarAnt's 1st date ENG Слонъ's 1st day of week ENG2014-08-17 00:00:00.000 Sunday 2014-08-18 00:00:00.000 Monday
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38808752
Фотография SomewhereSomehow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно я не в тему, но есть же в FAQ отличные вычисления от iap: Некоторые вычисления с датой
Оттуда и плясать.
Отличный гайд, столько наглядных примеров, что даже стыдно спрашивать что-то про дату, т.к.: "Все уже украдено до нас".
Нужно только немного усилий мозга, чтобы адаптировать это к своей ситуации.
ИМХО.
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38808759
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закешируйте её в таблицу с правильными индексами и развлекайтесь.
http://www.sql.ru/forum/1097504/vuha-dlya-kalendarya?hl=????? ??? ?????????
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38808893
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
господи.
теперь ему таблицы понравились. с индексами.
нет, ну вперед конечно, хоть не рекурсивное cte.

Код: sql
1.
2.
3.
4.
declare @w int = 33;       
select dateadd(ww, datediff(ww, '20010101', getdate()) - (datepart(ww, getdate()) - @w), '20010101')
---
2014-08-11 00:00:00.000
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38809224
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o-oкто в лес, кто по дрова
но главное, что все довольны
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
declare @w int = 33; 

set language russian;

select DATEADD(week, @w, convert(varchar(4), datepart(year, getdate()))) - 
      (datepart(dw, DATEADD(week, @w, convert(varchar(4), datepart(year, getdate())))) - 1) as [WarAnt's 1st date RUS],
       datename(dw, DATEADD(week, @w, convert(varchar(4), datepart(year, getdate()))) - 
      (datepart(dw, DATEADD(week, @w, convert(varchar(4), datepart(year, getdate())))) - 1)) as [WarAnt's 1st day of week RUS],
       
       DATEADD(week, @w, cast(DATEPART(year, GETDATE()) as varchar)) - 
      (datepart(dw, DATEADD(week, @w, cast (DATEPART(year, GETDATE()) as varchar))) - 2) as [Слонъ's 1st date RUS],  
       datename(dw, DATEADD(week, @w, cast(DATEPART(year, GETDATE()) as varchar)) - 
      (datepart(dw, DATEADD(week, @w, cast (DATEPART(year, GETDATE()) as varchar))) - 2))as [Слонъ's 1st day of week RUS]
      
set language us_english;

select DATEADD(week, @w, convert(varchar(4), datepart(year, getdate()))) - 
      (datepart(dw, DATEADD(week, @w, convert(varchar(4), datepart(year, getdate())))) - 1) as [WarAnt's 1st date ENG],
       datename(dw, DATEADD(week, @w, convert(varchar(4), datepart(year, getdate()))) - 
      (datepart(dw, DATEADD(week, @w, convert(varchar(4), datepart(year, getdate())))) - 1)) as [WarAnt's 1st day of week ENG],
       
       DATEADD(week, @w, cast(DATEPART(year, GETDATE()) as varchar)) - 
      (datepart(dw, DATEADD(week, @w, cast (DATEPART(year, GETDATE()) as varchar))) - 2) as [WarAnt's 1st date ENG],  
       datename(dw, DATEADD(week, @w, cast(DATEPART(year, GETDATE()) as varchar)) - 
      (datepart(dw, DATEADD(week, @w, cast (DATEPART(year, GETDATE()) as varchar))) - 2))as [Слонъ's 1st day of week ENG]


WarAnt's 1st date RUS WarAnt's 1st day of week RUS Слонъ's 1st date RUS Слонъ's 1st day of week RUS2014-08-18 00:00:00.000 понедельник 2014-08-19 00:00:00.000 вторник
WarAnt's 1st date ENG WarAnt's 1st day of week ENG WarAnt's 1st date ENG Слонъ's 1st day of week ENG2014-08-17 00:00:00.000 Sunday 2014-08-18 00:00:00.000 Monday

Про америкосов вопрос не поступал, понятно что у них все через ... и это нужно учитывать.
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38809246
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
WarAnt,

во блин, у него ответ подписан для 33-ей недели, это дата 2014-08-11 .
Слонъномер недели в этом году: 33, начало недели должно быть 2014-08-11.

у вас ни в каком языке эта дата не получается,
я показываю, что у вас хоть какое-то подобие первого дня недели,
а у "взявшего вашу идею" ТС вообще неделя начинается не с того дня при любом раскладе
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38809264
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o-oWarAnt,

во блин, у него ответ подписан для 33-ей недели, это дата 2014-08-11 .
Слонъномер недели в этом году: 33, начало недели должно быть 2014-08-11.

у вас ни в каком языке эта дата не получается,
я показываю, что у вас хоть какое-то подобие первого дня недели,
а у "взявшего вашу идею" ТС вообще неделя начинается не с того дня при любом раскладе

чего вдруг не получается то, просто нужно из взятого номера недели вычесть единицу при запросе
Код: sql
1.
2.
declare @week int = 33
select DATEADD(week, @week - 1, convert(varchar(4), datepart(year, getdate()))) - (datepart(dw, DATEADD(week,  @week - 1, convert(varchar(4), datepart(year, getdate())))) - 1)



2014-08-11 00:00:00.000

о-о вы меня удивили чес слово. И да это канает только для русского языка.
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38809284
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что уже закрыть топик:)

вот вариант для обоих языков

Код: sql
1.
2.
3.
select @@DATEFIRST,DATEADD(week, @week - 1, 
convert(varchar(4), datepart(year, getdate()))) - 
(datepart(dw, DATEADD(week,  @week - 1, convert(varchar(4), datepart(year, getdate())))) - (2 - @@DATEFIRST % 7))
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38809289
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
WarAnt,

слушайте, вчера было уже время отваливания с работы,
я, не вдаваясь в подробности, беру ваш код, код ТС,
подставляю 33, удивляюсь
да, у меня логин "америкосный", т.е. ответ мне выпал воскресный.
я тогда собираю вместе ваш и его код и просто привожу результат,
даже ответ не пишу, всего-то показываю, к чему пришли.
никаких наездов :)
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38809300
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
WarAntЧто уже закрыть топик:)

вот вариант для обоих языков

Код: sql
1.
2.
3.
select @@DATEFIRST,DATEADD(week, @week - 1, 
convert(varchar(4), datepart(year, getdate()))) - 
(datepart(dw, DATEADD(week,  @week - 1, convert(varchar(4), datepart(year, getdate())))) - (2 - @@DATEFIRST % 7))



так у меня для всех языков что-ли? 16862205
зачем вообще анализировать @@DATEFIRST,
достаточно базовую дату выбрать так, чтобы это был и понедельник, и начало первой недели.
т.е. 20010101 сгодился.

хотя я что, я за разнообразие :)
...
Рейтинг: 0 / 0
Узнать начало недели по её номеру
    #38809394
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o-oдостаточно базовую дату выбрать так, чтобы это был и понедельник, и начало первой недели.
т.е. 20010101 сгодился.'19000101' - понедельник!
И преобразуется в целый 0
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Узнать начало недели по её номеру
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]