|
|
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
Народ, подскажите как вычислить номер недели в году. Я что-то не нашел никакой функции ... PS. версия 8i ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2002, 16:25 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
CEIL ((p_date - round(p_date,'YEAR'))/7) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2002, 16:36 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
кажется маска формата ww (в доке есть, проверь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2002, 16:36 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
Hi TO_CHAR (DATE ,'PARAMETER') Parameter WW Week of the year (1-53) IW Week of the year (1-52, 1-53) ISO standard W Week of month (1-5) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2002, 16:38 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
Все было бы здорово, если бы SELECT TO_CHAR(TO_DATE('07-JAN-2002','DD-MON-YY'), 'WW') "New Year" FROM DUAL; давало вторую неделю, а не первую .. а мне бы нужно номер недели относительно реального календаря ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2002, 16:50 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
Попробуй CEIL ((p_date - next_day(round(p_date,'YEAR'),'Monday'))/7) + 1 ;)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2002, 16:58 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
На самом деле работает Код: plaintext 1. 2. 3. вот только "Воскресенье" или "Sunday" - вещь, зависящая от NLS-а ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2002, 17:27 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
to Trampler: спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2002, 17:45 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
А попробуй: Код: plaintext 1. В 9-ке работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 13:03 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
to Trampler: Твой код даст правильный результат только в этом году. А в следующем - прийдеться менять (а осталось 2.5 месяца). А как узнать номер недели 20.12.2001 - в минус пойдем!!! Надо свою функцию писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 14:02 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
To Slavik Ты прав, конечно же должен быть TRUNC - Код: plaintext 1. 2. 3. Andrey, Этот вариант правильнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 17:01 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
to Славик > to Trampler: > Твой код даст правильный результат только в этом году. > А в следующем - прийдеться менять (а осталось 2.5 > месяца). А как узнать номер недели 20.12.2001 - в > минус пойдем!!! > Надо свою функцию писать. А вы вообще-то попробовали использовать to_char(<date>, 'IW') ??? Если вы бы попробовали, то убедились, что номер недели определяется не относительно текущего года, а относительно начала года заданного в <date> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2002, 12:56 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
to SAA_ Все классно! Но проверь : 31.12.2002 - возврат 01. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2002, 13:06 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
Мой вариант вроде рабочий, раз никто пока не раскритиковал. Насчет номер недели определяется не относительно текущего года, а относительно начала года заданного в <date> - разве это действительно так? Тогда 01.01.2002 - в 53-й неделе 2001 что-ли? Да и использование to_char(<date>, 'IW') наверняка сделано под Sunday..Saturday а не под Понед..Воскр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2002, 13:16 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
А что проверить влом??? Так сложно??? В документации сказано: IW - Неделя года, в основе лежит стандарт ISO. WW - неделя года. Неделя 1 начинается с первого дня года и продолжается до седьмого дня. Каким образом, недели не всегда начинаются с воскресенья (как принято в США) Используй ISO и никогда у тебя не будет проблем с совместимостями и пр. Всегда можно отмазаться понятием СТАНДАРТ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2002, 14:13 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
to SAA_ Ты наверно не помимаешь. Вопрос: "а мне бы нужно номер недели относительно реального календаря ..." ? Не ISO!!! Какие тут могут быть отмазки? to Trampler, помоему у тебя есть ошибка. to Andrey, проверь этот Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2002, 14:41 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
to Trampler: в твоем коде ошибка: на 01.01.2006 - неделя 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2002, 14:47 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
То Славик Ты прав. Ошибка действительно есть. ИМХО конечно, но лучше использовать SQL, если есть возможность. Специально проверил твою функцию и аналогичный запрос - функция работает примерно в 6 раз медленнее, разве что индекс на нее сделать. И потом, лучше все-таки не использовать в явном виде 'Sunday' или 'Воскресенье' - Код: plaintext 1. 2. R_DATE - столбец в таблице TABLE 30.12.2001 - Воскресенье или Sunday ;) Кстати, может кто-нибудь знает как это написать менее коряво? ;)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2002, 15:26 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
Ну коль до "Sunday" добрались, подскажите, почему Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2002, 16:26 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. разве не работает?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2002, 16:36 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
Твой пример работает, но чето я не пойму почему здесь не хочет? Тогда вопрос с "Sunday", прекрасно решился бы Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2002, 16:52 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
select to_char(to_date('31.12.2002', 'DD.MM.YYYY'), 'WW') from dual возвращает 53 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2002, 16:38 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
Человек просил что-бы '07-JAN-2002' - было второй неделей. SELECT TO_CHAR(TO_DATE('07-JAN-2002','DD-MON-YY'), 'IW') "New Year" FROM DUAL - это и даёт. О чём спор-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2002, 14:29 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
Насколько я понимаю, проблема в том, что select to_char(to_date('31.12.2002', 'DD.MM.YYYY'), 'IW') возвращает 01 вместо 53 а select to_char(to_date('07.01.2002', 'DD.MM.YYYY'), 'WW') возвращает 01 вместо 02 вместо - потому что вопрос: "а мне бы нужно номер недели относительно реального календаря ..." Вот и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2002, 15:50 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
select to_char(to_date('31.12.2002', 'DD.MM.YYYY'), 'WW') from dual возвращает 53 (достало.... уже по второму кругу долбитесь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2002, 16:33 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
to SAA_ Читай внимательно - select to_char(to_date('31.12.2002', 'DD.MM.YYYY'), 'IW') возвращает 01 вместо 53 select to_char(to_date('07.01.2002', 'DD.MM.YYYY'), 'WW') возвращает 01 вместо 02 Тогда и доставать не будет... Да и вообще, вопрос уже закрыт по-моему, правильный вариант был предложен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2002, 16:36 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
"select to_char(to_date('31.12.2002', 'DD.MM.YYYY'), 'IW') возвращает 01 вместо 53" Да, я согласен, формально должно быть 53, а не 1. Но ведь эта неделя не полная, в неё входит только понедельник и вторник(30 и 31). Остальные дни недели относятся к другому году и являются именно первой неделей следующего года. Можем ли мы утверждать что это именно 53 неделя? Может ли она считатся полноценной неделей? Ведь неделя это не два дня, а семь дней, то есть начиная (для России) с понедельника и заканчивая воскресеньем. Если мы будем считать что это 53 неделя 2002 года и 1 неделя 2003 года одновременно, то при подсчёте недель в двух годах, получим одну лишнюю неделю, которая учлась дважды. Правильно ли это? Или такой пример: возьмём скажем следующую неделю октября 2002г., с 28 октября по 3 ноября. Так вот, относительно реального календаря это одна неделя, а не две. Не две, только потомучто она попала в два месяца. Поэтому "select to_char(to_date('31.12.2002', 'DD.MM.YYYY'), 'IW') возвращает 01 вместо 53", выглядит вполне логичным. Использование маски 'IW' даёт именно то что Andrey хотел. "Ошибка" происходит только для дней года последней недели, если она не заканчивается воскресеньем. Для этого можно делать отдельную проверку, а в основном пользоваться IW. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2002, 17:26 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
To softbulder Извини, но ты опять не прав. Использование маски 'IW' даёт именно то что Andrey хотел. Как известно, он хотел "номер недели относительно реального календаря ..." То есть, ну уж никак не хотел to_char(to_date('01.01.2005', 'DD.MM.YYYY'), 'IW') = 53. Да и про "ошибку" все совсем не так. Еще раз, правильный с точки зрения постановки вопроса вариант был предложен - 18 окт 02, 16:52. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2002, 18:07 |
|
||
|
Номер недели!
|
|||
|---|---|---|---|
|
#18+
AndreyВсе было бы здорово, если бы SELECT TO_CHAR(TO_DATE('07-JAN-2002','DD-MON-YY'), 'WW') "New Year" FROM DUAL; давало вторую неделю, а не первую .. а мне бы нужно номер недели относительно реального календаря ... SELECT TO_CHAR(TO_DATE('07-JAN-2002','DD-MON-YY'), 'IW') "New Year" FROM DUAL; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2018, 09:55 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1883049]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
147ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 499ms |

| 0 / 0 |
