Как рассчитать неделю года в Oracle, используя нестандартный первый день недели? - PullRequest
3 голосов
/ 06 ноября 2010

У меня есть запрос, который должен возвращать «неделю года» поля даты, но клиент запроса использует нестандартный первый день недели, поэтому TO_CHAR с 'IW' не возвращает ожидаемый результат. В этом случае первый день недели - суббота, а пятница - седьмой день недели.

С T-SQL я бы использовал DATEPART и SET DATEFIRST .

Что такое эквивалент Oracle? Ответы Oracle, которые я нашел в google all, говорят о настройке NLS_TERRITORY примерно так ALTER SESSION SET NLS_TERRITORY = 'UNITED KINGDOM';, но я не вижу, где я могу выбрать произвольный день (кроме, возможно, поиска территории, которая использует субботу).

Ответы [ 2 ]

4 голосов
/ 06 ноября 2010

IW работает с понедельника по воскресенье, поэтому вы должны получить то, что ищете. В общем, получите неделю по дням через 2 дня:

to_char(your_date + 2, 'IW')
2 голосов
/ 06 ноября 2010

Формат недели по умолчанию Oracle рассчитывает номер недели с первого дня года, а не с первого дня недели.

Так, если год начинается 01 января 2009 года, и первый день включенСреда, неделя № 1 будет с 01 января 2009 года по 08 января 2009 года (со среды по вторник).

Вы можете использовать формат "iw" (и небольшую настройку), если вам нужнодиапазон недели начинается с воскресенья по субботу.http://download -uk.oracle.com / docs / cd / B14117_01 / server.101 / b10749 / ch9sql.htm # CIHGFJEI

Попробуйте этот код ниже.Я в основном использую формат "IW" и добавляю условие, чтобы номер недели начинался с указанной даты .. скажем ... 01-Jul-2008.

select target_date, 
        to_char(target_date+1,'iw') week_sun_thru_saturday,
        to_number(to_char(target_date+1,'iw')) -
        to_number(to_char( to_date('10-jul-2008','dd-mon-yyyy')+1,'iw')) week_from_01_jul_2008
from t;

Помните ... Этот код будетне давать неделю номер 1 с 1 июля по 7 июля. Если, конечно, 01 июля 2008 года - воскресенье;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...