powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / первый день недели
60 сообщений из 60, показаны все 3 страниц
первый день недели
    #33508048
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как получить первый день недели, если известно какая это по счёту неделя и год?
т.е. 4 неделя 2006 год = 23.01.2006
...
Рейтинг: 0 / 0
первый день недели
    #33508082
Proteus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
SELECT TRUNC(to_date('2006', 'yyyy') +  7  *  4 , 'day')
  FROM DUAL;

...
Рейтинг: 0 / 0
первый день недели
    #33508107
AlexOI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select next_day(to_date('01012006', 'ddmmYYYY') + 3 * 7,'Понедельник') from dual

где 3 - число недель минус 1
...
Рейтинг: 0 / 0
первый день недели
    #33508130
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Proteus & AlexOI
Потренируйтесь при nls_territory=america & nls_date_language=american соответственно :)
...
Рейтинг: 0 / 0
первый день недели
    #33508141
AlexOI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Elic

Я думаю несложно установить параметр в соответствии с существующим nls_date_language
...
Рейтинг: 0 / 0
первый день недели
    #33508144
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне нужны первый и последний дни заданной недели года.

как получить?
...
Рейтинг: 0 / 0
первый день недели
    #33508150
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexOIЯ думаю несложно установить параметр в соответствии с существующим nls_date_languageСложно. Код должен работать правильно независимо от NLS-окружения текущей сессии.
...
Рейтинг: 0 / 0
первый день недели
    #33508168
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexOIЯ думаю несложно установить параметр в соответствии с существующим nls_date_language
После чего вызов "давно отлаженной и уже год как успешно работающей" процедуры вставляют в job, наступает конец периода, главбух вызывает к себе начальника ИТ отдела и подробно рассказывает ему, каким именно образом она вступит в противоестественную половую связь со всеми программистами разом, если все НЕМЕДЛЕННО НЕ БУДЕТ ИСПРАВЛЕНО.
...
Рейтинг: 0 / 0
первый день недели
    #33508178
iV@n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johannaмне нужны первый и последний дни заданной недели года.

как получить?
а чем тебе этот вариант не нравится?
Код: plaintext
1.
2.
3.
select pivot.week, to_date('2006','yyyy') + (pivot.week- 1 )* 7  +  1  first_day,
 to_date('2006','yyyy') + (pivot.week- 1 )* 7  +  7  last_day
from dual, (select rownum week from all_objects where rownum <=  52 ) pivot
...
Рейтинг: 0 / 0
первый день недели
    #33508180
AlexOI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сама по себе задача устанавливает зависимость от nls параметров. Так как понятие "первый день недели" зависит от них. Так что решать ее независимо от текущих NLS параметров сессии - некорректно.
...
Рейтинг: 0 / 0
первый день недели
    #33508196
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iV@n johannaмне нужны первый и последний дни заданной недели года.

как получить?
а чем тебе этот вариант не нравится?
Код: plaintext
1.
2.
3.
select pivot.week, to_date('2006','yyyy') + (pivot.week- 1 )* 7  +  1  first_day,
 to_date('2006','yyyy') + (pivot.week- 1 )* 7  +  7  last_day
from dual, (select rownum week from all_objects where rownum <=  52 ) pivot

потому что для 2005 года получаются не корректные результаты
...
Рейтинг: 0 / 0
первый день недели
    #33508215
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexOIСама по себе задача устанавливает зависимость от nls параметров. Так как понятие "первый день недели" зависит от них.У русских и иже с ними первый день недели - понедельник. Незавимо от того, что об этом думают буржуины и какие nls-параметры у текущей сессии.
...
Рейтинг: 0 / 0
первый день недели
    #33508226
AlexOI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Elic

Вот и получи слово "Понедельник" на языке, соответсвующем NLS - параметрам сессии и подставляй как параметр. Пока еще никто не предложил решения, которое будет работать не анализируя или устанавлявая NLS параметры. Может такого решения и не существует.
...
Рейтинг: 0 / 0
первый день недели
    #33508235
Part
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идею для любого nls_lang можно предложить такую
Код: plaintext
1.
            (to_char(dat, 'DAY') = to_char(to_date( '23.01.2006', 'dd.mm.yyyy' ), 'DAY'))                 
, т.е нам просто известно, что 23.01.2006 понедельник
...
Рейтинг: 0 / 0
первый день недели
    #33508239
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PartИдею для любого nls_lang можно предложить такую
Код: plaintext
1.
            (to_char(dat, 'DAY') = to_char(to_date( '23.01.2006', 'dd.mm.yyyy' ), 'DAY'))                 
, т.е нам просто известно, что 23.01.2006 понедельник
а последний как? 29.01.2006
...
Рейтинг: 0 / 0
первый день недели
    #33508257
empty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select trunc(trunc(sysdate,'yyyy')+decode(sign(trunc(sysdate,'yyyy')-trunc(trunc(sysdate,'yyyy'),'day')),1,7,0),'day')+(7*(4-1)) from dual

Где
trunc(sysdate,'yyyy') - год
4 - номер недели
а decode(sign(...) для нахождения полной первой недели
...
Рейтинг: 0 / 0
первый день недели
    #33508265
MaryCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
первый и последний дни 4й недели 2005 года
Код: plaintext
1.
2.
3.
4.
5.
select to_date('01.01.2005', 'dd.mm.yyyy') + 
        4 * 7  - to_char(to_date('01.01.2005', 'dd.mm.yyyy'), 'D') +  1 
       ,
       to_date('01.01.2005', 'dd.mm.yyyy') + 
        4 * 7  - to_char(to_date('01.01.2005', 'dd.mm.yyyy'), 'D') +  7 
  from dual
...
Рейтинг: 0 / 0
первый день недели
    #33508266
iV@n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
select pivot.week,
next_day(to_date('2005','yyyy') -  0 . 1 ,'monday') + (pivot.week- 1 )* 7   first_day,
next_day(to_date('2005','yyyy') -  0 . 1 ,'monday') + (pivot.week- 1 )* 7  +  6  last_day
from dual, (select rownum week from all_objects where rownum <=  52 ) pivot
...
Рейтинг: 0 / 0
первый день недели
    #33508272
MaryCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
select trunc(sysdate,'yyyy') + 
        4 * 7  - to_char(trunc(sysdate,'yyyy'), 'D') +  1 
       ,
       trunc(sysdate,'yyyy') + 
        4 * 7  - to_char(trunc(sysdate,'yyyy'), 'D') +  7 
  from dual

Да, trunc надо было учесть...:/
...
Рейтинг: 0 / 0
первый день недели
    #33508277
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iV@n
Код: plaintext
1.
2.
3.
4.
select pivot.week,
next_day(to_date('2005','yyyy') -  0 . 1 ,'monday') + (pivot.week- 1 )* 7   first_day,
next_day(to_date('2005','yyyy') -  0 . 1 ,'monday') + (pivot.week- 1 )* 7  +  6  last_day
from dual, (select rownum week from all_objects where rownum <=  52 ) pivot

тогда выходит, что в 2004 году 1-я неделя начинается 05.01.2004
если же SELECT to_char(to_date('05-Jan-2004'),'iw') FROM dual, то выходит вторая неделя
...
Рейтинг: 0 / 0
первый день недели
    #33508284
Proteus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я что то совсем запутался...
В зависимости от региональной настройки должно ли менятся число в результате запроса ' дата начала 4-ой недели' или нет?

Если да то вот:
Код: plaintext
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Connected to Oracle9i Enterprise Edition Release  9 . 2 . 0 . 4 . 0  
Connected as str
alter session set NLS_DATE_LANGUAGE = 'RUSSIAN';

Session altered
alter session set NLS_LANGUAGE = 'RUSSIAN';

Session altered
alter session set NLS_Territory = 'CIS';

Session altered
SELECT TRUNC(to_date('2006', 'yyyy') +  7  *  4 , 'day') field1,
to_char(TRUNC(to_date('2006', 'yyyy') +  7  *  4 , 'day'),'day ww dd.mm.yyyy') field2
FROM DUAL;

FIELD1      FIELD2
----------- -------------------------
 23 . 01 . 06     понедельник  04   23 . 01 . 2006 
alter session set NLS_DATE_LANGUAGE = 'AMERICAN';

Session altered
alter session set NLS_LANGUAGE = 'AMERICAN';

Session altered
alter session set NLS_Territory = 'AMERICA';

Session altered
SELECT TRUNC(to_date('2006', 'yyyy') +  7  *  4 , 'day') field1,
to_char(TRUNC(to_date('2006', 'yyyy') +  7  *  4 , 'day'),'day ww dd.mm.yyyy') field2
FROM DUAL;

FIELD1      FIELD2
----------- -----------------------
 29 . 01 . 06     sunday     05   29 . 01 . 2006 

SQL> 

Если же не должна то тогда встречный вопрос. А можно ли считать корректным приложение которое не реагирует на региональные настройки?
...
Рейтинг: 0 / 0
первый день недели
    #33508303
iV@n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johanna iV@n
Код: plaintext
1.
2.
3.
4.
select pivot.week,
next_day(to_date('2005','yyyy') -  0 . 1 ,'monday') + (pivot.week- 1 )* 7   first_day,
next_day(to_date('2005','yyyy') -  0 . 1 ,'monday') + (pivot.week- 1 )* 7  +  6  last_day
from dual, (select rownum week from all_objects where rownum <=  52 ) pivot

тогда выходит, что в 2004 году 1-я неделя начинается 05.01.2004
если же SELECT to_char(to_date('05-Jan-2004'),'iw') FROM dual, то выходит вторая неделя
а что страного, что 1-я неделя 2004 года начинается 5?
имхо я бы не сказал, что 1-я неделя 2004 года начинается в 2003 году, хотя тогда получается, что последняя неделя 2003 года кончается в 2004 году, что тоже странновато.
нужно определиться что считать первой неделей года
...
Рейтинг: 0 / 0
первый день недели
    #33508314
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iV@n
а что страного, что 1-я неделя 2004 года начинается 5?
имхо я бы не сказал, что 1-я неделя 2004 года начинается в 2003 году, хотя тогда получается, что последняя неделя 2003 года кончается в 2004 году, что тоже странновато.
нужно определиться что считать первой неделей года
определиться легко, первая неделя это результат этой функции
SELECT to_char(to_date('01-Jan-2004'),'iw') =01
...
Рейтинг: 0 / 0
первый день недели
    #33508315
Фотография scela
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:YY - Год
:week - неделя

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT dt 
      ,dt-day_of_week   first_day_of_week
      ,dt-day_of_week+ 7  last_day_of_week
      ,day_of_week
  FROM ( 
       SELECT dt,point , DECODE( SIGN(md), - 1  ,md+ 8 , md+ 1 ) day_of_week /*День недели даты DT*/   
         FROM ( SELECT dt,point , MOD( dt-point , 7 ) md                  
                  FROM ( SELECT TO_DATE('0101'||:YY, 'DDMMYY')+ 7 *(:week- 1 ) dt   /*Это просто дата, но в указанных году/недели*/   
                                ,TO_DATE('01-01-2001', 'DD-MM-YYYY') point  /*Это ПН 2001 года*/
                         FROM dual
                        )
              )
       )
...
Рейтинг: 0 / 0
первый день недели
    #33508331
Фотография scela
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT dt 
      ,dt-day_of_week   first_day_of_week
      ,dt-day_of_week+ 7  last_day_of_week
      ,day_of_week
  FROM ( 
       SELECT dt,point , DECODE( SIGN(md), - 1  ,md+ 7 , md) day_of_week /*День недели даты DT*/   
         FROM ( SELECT dt,point , MOD( dt-point , 7 ) md                  
                  FROM ( SELECT TO_DATE('0101'||:YY, 'DDMMYY')+ 7 *(:week- 1 ) dt   /*Это просто дата, но в указанных году/недели*/   
                                ,TO_DATE('01-01-2001', 'DD-MM-YYYY') point  /*Это ПН 2001 года*/
                         FROM dual
                        )
              )
       )

Это я граничные условия не проверил. Звиняйте.
...
Рейтинг: 0 / 0
первый день недели
    #33508333
Фотография pan159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот вариант годный для России, США, Англии:
select -- номер недели= 10
to_char(to_date('01/01/2006','DD/MM/YYYY')
+ 7 * 10 - to_char(to_date('01/01/2006','DD/MM/YYYY'),'D'),'DD/MM/YYYY') first_day_of_week,
to_char(to_date('01/01/2006','DD/MM/YYYY')
+ 7 * 10 - to_char(to_date('01/01/2006','DD/MM/YYYY'),'D'),'WW') week_number
from dual
Если алгоритм используется в области логистики для остальных стран Европы, то нужно его чуть подправить: использовать вместо WW формат WI.
...
Рейтинг: 0 / 0
первый день недели
    #33508347
Фотография scela
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно так:
Проверял и вперед и назад.
Опираемся на понедельник 2001г.
Вычисляем день недели даты, заданной годом и номером недели -
как остаток от деления на 7 разницы дат.
это будет смещение, которое нужно отнять и прибавить к дате, для получения первого и последнего дня.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT dt   /*Некая дата в году YY, неделя WW*/ 
      ,dt-day_of_week   first_day_of_week   /*Дата первого дня недели*/
      ,dt-day_of_week+ 6  last_day_of_week    /*Дата последнего дня недели*/
      ,day_of_week  /*День недели даты DT 0=ПН,6=ВС*/
  FROM ( 
       SELECT dt,point , md,DECODE( SIGN(md), - 1  ,md+ 7 , md) day_of_week    
         FROM ( SELECT dt,point , MOD( dt-point , 7 ) md                  
                  FROM ( SELECT TO_DATE('0101'||:YY, 'DDMMYY')+ 7 *(:week- 1 ) dt   /*Это просто дата, но в указанных году/недели*/   
                                ,TO_DATE('01-01-2001', 'DD-MM-YYYY') point  /*Это ПН 2001 года*/
                         FROM dual
                        )
              )
       )
Все. время принять пиво.
...
Рейтинг: 0 / 0
первый день недели
    #33508350
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to scela

спасибо пока работает хорошо, в понедельник еще протестирую на всё возможное
...
Рейтинг: 0 / 0
первый день недели
    #33508367
Фотография pan159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joanna: "определиться легко, первая неделя это результат этой функции
SELECT to_char(to_date('01-Jan-2004'),'iw') =01 "

А если укажете 01-Jun-2006, то получите 52. Европейцы переходящую неделю относят к предыдущему году, а американцы к следующему.
Так что у американцев последняя неделя года может иметь номер 1.

Что выбрать - зависит от назначения программы.
...
Рейтинг: 0 / 0
первый день недели
    #33510723
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pan159Joanna: "определиться легко, первая неделя это результат этой функции
SELECT to_char(to_date('01-Jan-2004'),'iw') =01 "

А если укажете 01-Jun-2006, то получите 52. Европейцы переходящую неделю относят к предыдущему году, а американцы к следующему.
Так что у американцев последняя неделя года может иметь номер 1.

Что выбрать - зависит от назначения программы.
всё правильно 1 января 1006 года это еще 52 неделя.
iw- это и есть европейская неделя
SELECT to_char(to_date('01-Jan-2004'),'iw') =01
SELECT to_char(to_date('01-Jan-2006'),'iw') =52
...
Рейтинг: 0 / 0
первый день недели
    #33510851
iV@n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johanna pan159Joanna: "определиться легко, первая неделя это результат этой функции
SELECT to_char(to_date('01-Jan-2004'),'iw') =01 "

А если укажете 01-Jun-2006, то получите 52. Европейцы переходящую неделю относят к предыдущему году, а американцы к следующему.
Так что у американцев последняя неделя года может иметь номер 1.

Что выбрать - зависит от назначения программы.
всё правильно 1 января 1006 года это еще 52 неделя.
iw- это и есть европейская неделя
SELECT to_char(to_date('01-Jan-2004'),'iw') =01
SELECT to_char(to_date('01-Jan-2006'),'iw') =52

если основываться на 'iw', то можно так
Код: plaintext
1.
2.
3.
select min(t.dt), max(t.dt), to_char(t.dt,'iw') week from (
 select to_date('2004','yyyy')+rownum- 7  dt from all_objects where rownum <=  372 ) t
group by to_char(t.dt,'iw')
...
Рейтинг: 0 / 0
первый день недели
    #33510960
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
select trunc(to_date(yn,'yyyy')+wn* 7 ,'iw') d1 from (
  select  4  wn , 2006  yn from dual
)
...
Рейтинг: 0 / 0
первый день недели
    #33510968
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iV@n.....
если основываться на 'iw', то можно так
Код: plaintext
1.
2.
3.
select min(t.dt), max(t.dt), to_char(t.dt,'iw') week from (
 select to_date('2004','yyyy')+rownum- 7  dt from all_objects where rownum <=  372 ) t
group by to_char(t.dt,'iw')

спасибо, похоже то, что надо.
...
Рейтинг: 0 / 0
первый день недели
    #33511675
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johanna iV@n.....
если основываться на 'iw', то можно так
Код: plaintext
1.
2.
3.
select min(t.dt), max(t.dt), to_char(t.dt,'iw') week from (
 select to_date('2004','yyyy')+rownum- 7  dt from all_objects where rownum <=  372 ) t
group by to_char(t.dt,'iw')

спасибо, похоже то, что надо.
нет, опять ошибка: 2004 год 52 неделя

все функции считают с ошибками :(
...
Рейтинг: 0 / 0
первый день недели
    #33511718
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johanna..
нет, опять ошибка: 2004 год 52 неделя
все функции считают с ошибками :( ???
Код: plaintext
1.
2.
3.
select trunc(to_date(yn,'yyyy')+wn* 7 ,'iw') d1 from (
  select  4  wn , 2006  yn from dual
)
 27 . 12 . 2004 
...
Рейтинг: 0 / 0
первый день недели
    #33511761
iV@n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johanna johanna iV@n.....
если основываться на 'iw', то можно так
Код: plaintext
1.
2.
3.
select min(t.dt), max(t.dt), to_char(t.dt,'iw') week from (
 select to_date('2004','yyyy')+rownum- 7  dt from all_objects where rownum <=  372 ) t
group by to_char(t.dt,'iw')

спасибо, похоже то, что надо.
нет, опять ошибка: 2004 год 52 неделя

все функции считают с ошибками :(
у orawsh'a вроде хороший запрос. но я и свой поправил
Код: plaintext
1.
2.
3.
select min(t.dt), max(t.dt), to_char(t.dt,'yyyy') year, to_char(t.dt,'iw') week from (
 select to_date('2004','yyyy')+rownum- 7  dt from all_objects where rownum <=  372 ) t
group by to_char(t.dt,'yyyy'), to_char(t.dt,'iw')
...
Рейтинг: 0 / 0
первый день недели
    #33511763
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish johanna..
нет, опять ошибка: 2004 год 52 неделя
все функции считают с ошибками :( ???
Код: plaintext
1.
2.
3.
select trunc(to_date(yn,'yyyy')+wn* 7 ,'iw') d1 from (
  select  4  wn , 2006  yn from dual
)
 27 . 12 . 2004 

1 я неделя 2004 начинается не 5 января
...
Рейтинг: 0 / 0
первый день недели
    #33511770
iV@n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iV@n
Код: plaintext
1.
2.
3.
select min(t.dt), max(t.dt), to_char(t.dt,'yyyy') year, to_char(t.dt,'iw') week from (
 select to_date('2004','yyyy')+rownum- 7  dt from all_objects where rownum <=  372 ) t
group by to_char(t.dt,'yyyy'), to_char(t.dt,'iw')

тут тоже неправильно в общем случае...
...
Рейтинг: 0 / 0
первый день недели
    #33511783
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johanna orawish johanna..
нет, опять ошибка: 2004 год 52 неделя
все функции считают с ошибками :( ???
Код: plaintext
1.
2.
3.
select trunc(to_date(yn,'yyyy')+wn* 7 ,'iw') d1 from (
  select  4  wn , 2006  yn from dual
)
 27 . 12 . 2004 

1 я неделя 2004 начинается не 5 января
А когда?
johannaкак получить первый день недели, если известно какая это по счёту неделя и год?
т.е. 4 неделя 2006 год = 23.01.2006
Код: plaintext
1.
2.
3.
4.
5.
6.
select trunc(to_date(yn,'yyyy')+wn* 7 ,'iw') d1 from (
  select rownum wn , 2006  yn from tab where rownum< 5 
)
 02 . 01 . 2006 
 09 . 01 . 2006 
 16 . 01 . 2006 
 23 . 01 . 2006 
...
Рейтинг: 0 / 0
первый день недели
    #33511794
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish
А когда? ...
1-я изо неделя начинается
29.12.2003
...
Рейтинг: 0 / 0
первый день недели
    #33511806
Jannny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johanna orawish
А когда? ...
1-я изо неделя начинается
29.12.2003
"Просто за время пути собака могла подрасти" ;) Условие задачи меняется во время ее выполнения - это обычная ситуация ;))
...
Рейтинг: 0 / 0
первый день недели
    #33511813
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тада так
Код: plaintext
1.
select trunc(to_date(yn,'yyyy'),'iw')+(wn- 1 )* 7  d1
from (select rownum wn , 2006  yn from tab where rownum< 5 )
...
Рейтинг: 0 / 0
первый день недели
    #33511815
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iw=изо неделя
...
Рейтинг: 0 / 0
первый день недели
    #33511826
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishтада так
Код: plaintext
1.
select trunc(to_date(yn,'yyyy'),'iw')+(wn- 1 )* 7  d1
from (select rownum wn , 2006  yn from tab where rownum< 5 )

в 2006 году iso-неделя начинается 2 января.
1-я изо неделя должна иметь минимум 4 дня, поэтому она может начинаться в прошлом году, как в 2004 году
...
Рейтинг: 0 / 0
первый день недели
    #33511842
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johanna orawishтада так
Код: plaintext
1.
select trunc(to_date(yn,'yyyy'),'iw')+(wn- 1 )* 7  d1
from (select rownum wn , 2006  yn from tab where rownum< 5 )

в 2006 году iso-неделя начинается 2 января.
1-я изо неделя должна иметь минимум 4 дня, поэтому она может начинаться в прошлом году, как в 2004 году
типа этого, значит
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select 
 case when trunc(yd1,'iw')+  3  >= trunc(yd1,'yyyy') then
   trunc(yd1,'iw')+(wn- 1 )* 7 
 else
   trunc(yd1,'iw')+(wn)* 7 
 end d1
from 
  (select wn,to_date(yn,'yyyy') yd1 from
    (select rownum wn , 2006  yn from tab where rownum< 5 ))
...
Рейтинг: 0 / 0
первый день недели
    #33511854
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pan159Европейцы переходящую неделю относят к предыдущему году, а американцы к следующему.

Nonsense:

Calculating Week Numbers
The week numbers returned by the WW format mask are calculated according to the following algorithm: int(dayOfYear+6)/7. This algorithm does not follow the ISO standard (2015, 1992-06-15).

To support the ISO standard, the IW format element is provided. It returns the ISO week number. In addition, the I, IY, IYY, and IYYY format elements, equivalent in behavior to the Y, YY, YYY, and YYYY format elements, return the year relating to the ISO week number.

In the ISO standard, the year relating to an ISO week number can be different from the calendar year. For example, 1st Jan 1988 is in ISO week number 53 of 1987. A week always starts on a Monday and ends on a Sunday. The week number is determined according the following rules:

If January 1 falls on a Friday, Saturday, or Sunday, then the week including January 1 is the last week of the previous year, because most of the days in the week belong to the previous year.

If January 1 falls on a Monday, Tuesday, Wednesday, or Thursday, then the week is the first week of the new year, because most of the days in the week belong to the new year.


For example, January 1, 1991, is a Tuesday, so Monday, December 31, 1990, to Sunday, January 6, 1991, is in week 1. Thus, the ISO week number and year for December 31, 1990, is 1, 1991. To get the ISO week number, use the IW format mask for the week number and one of the IY formats for the year.

johanna1 я неделя 2004 начинается не 5 января

If we are talking about ISO standard, that is correct. January 1, 2004 was Thursday. Therefore, 1 я неделя 2004 начинается December 28, 2003. There is a simple way to calculate first day of the first week of a year in ISO format:

Код: plaintext
SELECT NEXT_DAY(TO_DATE('&YEAR','YYYY') -  4 ,'MONDAY') FROM dual

So in order to получить первый день недели, если известно какая это по счёту неделя и год you need:

Код: plaintext
SELECT NEXT_DAY(TO_DATE('&YEAR','YYYY') -  4 ,'MONDAY') + (&WEEK -  1 ) *  7  FROM dual

For example:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> SELECT NEXT_DAY(TO_DATE('&YEAR','YYYY') -  4 ,'MONDAY') + (&WEEK -  1 ) *  7  FROM dual;
Enter value for year:  2006 
Enter value for week:  4 
old    1 : SELECT NEXT_DAY(TO_DATE('&YEAR','YYYY') -  4 ,'MONDAY') + (&WEEK -  1 ) *  7  FROM dual
new    1 : SELECT NEXT_DAY(TO_DATE('2006','YYYY') -  4 ,'MONDAY') + ( 4  -  1 ) *  7  FROM dual

NEXT_DAY(
---------
 23 -JAN- 06 

SQL> 

SY.
...
Рейтинг: 0 / 0
первый день недели
    #33512738
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем спасибо, решили своими силами, и без зависимости от региональных настроек.
...
Рейтинг: 0 / 0
первый день недели
    #33519502
Фотография pan159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joanna,
еще раз обращаю внимание на контекст задачи. У меня был случай, когда в зависимости от контракта (с европейцами или американцами) номер недели вычислялся по-разному. Поэтому любой однозначный алгоритм давал бы ошибку в определении сроков доставки груза.
...
Рейтинг: 0 / 0
первый день недели
    #33520153
Фотография johanna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pan159Joanna,
еще раз обращаю внимание на контекст задачи. У меня был случай, когда в зависимости от контракта (с европейцами или американцами) номер недели вычислялся по-разному. Поэтому любой однозначный алгоритм давал бы ошибку в определении сроков доставки груза.
спасибо :)
для этого я функцию написала, чтоб настройки не подвели
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
первый день недели
    #38809952
Vladimir Bolotin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

машина времени, да, но решал похожий вопрос и наткнулся на тему. :-)
Поэтому уж вставлю спои 5 копеек:

ИМХО
If we are talking about ISO standard, that is correct. January 1, 2004 was Thursday. Therefore, 1 я неделя 2004 начинается December 28, 2003. There is a simple way to calculate first day of the first week of a year in ISO format:
правильно будет так

Код: plsql
1.
SELECT NEXT_DAY(TRUNC(TO_DATE('&YEAR','YYYY'),'YEAR') - 4,'MONDAY') FROM dual;
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
первый день недели
    #39553011
topov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
scelaПравильно так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT dt 
      ,dt-day_of_week   first_day_of_week
      ,dt-day_of_week+7 last_day_of_week
      ,day_of_week
  FROM ( 
       SELECT dt,point , DECODE( SIGN(md), -1 ,md+7, md) day_of_week /*День недели даты DT*/   
         FROM ( SELECT dt,point , MOD( dt-point ,7) md                  
                  FROM ( SELECT TO_DATE('0101'||:YY, 'DDMMYY')+7*(:week-1) dt   /*Это просто дата, но в указанных году/недели*/   
                                ,TO_DATE('01-01-2001', 'DD-MM-YYYY') point  /*Это ПН 2001 года*/
                         FROM dual
                        )
              )
       )



Это я граничные условия не проверил. Звиняйте.

подствавь 01-01-2017. Скрипт не работает
...
Рейтинг: 0 / 0
первый день недели
    #39553023
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
topovне работаетУ тебя в нике ошибка. Одна гласная не задвоена.

RTFM iw
...
Рейтинг: 0 / 0
первый день недели
    #39553157
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexOIТак что решать ее независимо от текущих NLS параметров сессии - некорректно.

А вот тут ты очень ошибаешься. Представь недельный отчет обсуждаемый на митинге сотрудников трех филиалов - Россия, США и Израиль. Товаришь из России докладавает что за неделю было продано... Господа чешут репу. Как обычно все "depends" .

SY.
...
Рейтинг: 0 / 0
первый день недели
    #39553254
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

Между сообщениями интервал более 1 года.
Соломон, ты правда считаешь что ответ 2014-го года на вопрос 2006-го ещё актуален?
...
Рейтинг: 0 / 0
первый день недели
    #39553874
env, а ты представь на секунду что спросили вчера, ощущение неактуальности исчезает?
...
Рейтинг: 0 / 0
первый день недели
    #39554058
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eric Maxim Choupo-Moting,

тут скорее вопрос и в том что/как считать первым днем недели

.....
stax
...
Рейтинг: 0 / 0
первый день недели
    #39554330
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,
очень часто вместо получения четкой постановки пытаются побежать и решить непонятную задачу нахрапом. так и тут. надо уточнить что считать первым днем недели и первой неделей. а потом уже идти думать.
...
Рейтинг: 0 / 0
первый день недели
    #39554436
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vint,

так я именно об етом, нумеровать могут по разному

.....
stax
...
Рейтинг: 0 / 0
первый день недели
    #39554449
Бракованный финский угорь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax, ничего себе. Станислав? спрашивает?! а как же наваять без разбора 7 решений для 7 дней недели?
...
Рейтинг: 0 / 0
первый день недели
    #39554455
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бракованный финский угорьStax, ничего себе. Станислав? спрашивает?! а как же наваять без разбора 7 решений для 7 дней недели?

да что тут решать, надо сперва 20959975 у бухов уточнить

ps
звать меня (на выбор) Стах, Станислав, Стасик и тд

.....
stax
...
Рейтинг: 0 / 0
60 сообщений из 60, показаны все 3 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / первый день недели
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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