22.12.2008 16:24
Pblcb
 
Господа, подскажите пожалуйста как заставить Оракл поверить в то что неделя начинается с понедельника, а не с воскресенья?
22.12.2008 17:02
akonev
 
ты бы рассказал подробнее, что сделать пытаешься...
так подойдет?
Код:
alter session set nls_territory = cis;
22.12.2008 17:39
Pblcb
 
Подробнее у нас на предприятии планы на следующий год по неделям строят. так вот из-за того что менеджеры считают недели от понедельника а оракл от воскресения, получается что их недели с неделями в учетной системе не совпадают. Жить конечно можно. но некрасиво выходит.
nls_territory менять уже пытался. не помогло к величайшему моему удивлению.
22.12.2008 18:15
OlegON
 
Ты хочешь, чтобы в зависимости от территории у тебя количество выходных дней менялось? ;) Неправильный алгоритм
Код:
select
   decode (
      to_char(
         last_day(
           add_months(
           sysdate
           )
         ),
      'fmDAY'),
   'MONDAY','1',
   'TUESDAY','2',
   'WEDNESDAY','3',
   'THURSDAY','4',
   'FRIDAY','5',
   'SATURDAY','6',
   'SUNDAY','7',
   'na') 
			from dual;
22.12.2008 18:37
Pblcb
 
нет, OlegON, меня интересует не количество выходных дней, а их последовательность. И чтобы поменялась именно для всей БД, а не для одного конкретного алгоритма, ибо есть уже куча отчетов которые используют встроенную нумерацию недель.
И в этих всех отчетах получается получается что скажем 01.12.2008 и 02.12.2008 входят в разные недели. Для америкосов и им подобных ситуация нормальная(1-е число является последним днем 48-й недели, а 2-е число - первым днем 49-й), а для СНГ эти два дня должны входить в одну 49-ю неделю.
22.12.2008 18:56
OlegON
 
Ну если ты такой злой, то должно получаться :)
Цитата:
SQL> select to_char(sysdate,'D DAY') from dual;

TO_CHAR(SYSDATE,'DDAY')
--------------------------------------
2 MONDAY

SQL> alter session set nls_territory = cis;

Session altered.

SQL> select to_char(sysdate,'D DAY') from dual;

TO_CHAR(SYSDATE,'DDAY')
--------------------------------------
1 MONDAY
22.12.2008 18:59
OlegON
 
И еще, по доке... В этом пролет, наверное.
Цитата:
First Calendar Week of the Year: Some countries use week numbers for scheduling, planning, and bookkeeping. Oracle supports this convention. In the ISO standard, the week number can be different from the week number of the calendar year. For example, 1st Jan 2005 is in ISO week number 53 of 2004. An ISO week starts on Monday and ends on Sunday.
To support the ISO standard, Oracle provides the IW date format element. It returns the ISO week number.
The first calendar week of the year is determined by the NLS_TERRITORY parameter.
23.12.2008 07:07
akonev
 
явно, оно и есть. по ISO получается 49-я:
Код:
SQL> select to_char(to_date('01.12.2008','DD.MM.YYYY'),'WW IW D DAY') from dual;

TO_CHAR(TO_DATE('
-----------------
48 49 2 MONDAY

SQL> alter session set nls_territory = cis;

Session altered.

SQL> select to_char(to_date('01.12.2008','DD.MM.YYYY'),'WW IW D DAY') from dual;

TO_CHAR(TO_DATE('
-----------------
48 49 1 MONDAY
осталось придумать, как заставить всегда считать по ISO, чтобы отчеты не переделывать.
чего-то не вижу простого решения.
Часовой пояс GMT +3, время: 00:52.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.