powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / первый день недели
25 сообщений из 60, страница 1 из 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
25 сообщений из 60, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / первый день недели
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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