2010-11-05 2 views
3

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

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

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

ответ

3

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

to_char(your_date + 2, 'IW') 
1

формат неделе 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; 

Remember..This код не даст номера неделю 1 от jul1st до июля-07 .unless конечно 01-июля-2008 является воскресеньем;)

Смежные вопросы