|
|
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
Вот вариант годный для России, США, Англии: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2006, 18:08 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
Правильно так: Проверял и вперед и назад. Опираемся на понедельник 2001г. Вычисляем день недели даты, заданной годом и номером недели - как остаток от деления на 7 разницы дат. это будет смещение, которое нужно отнять и прибавить к дате, для получения первого и последнего дня. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2006, 18:19 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
to scela спасибо пока работает хорошо, в понедельник еще протестирую на всё возможное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2006, 18:19 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
Joanna: "определиться легко, первая неделя это результат этой функции SELECT to_char(to_date('01-Jan-2004'),'iw') =01 " А если укажете 01-Jun-2006, то получите 52. Европейцы переходящую неделю относят к предыдущему году, а американцы к следующему. Так что у американцев последняя неделя года может иметь номер 1. Что выбрать - зависит от назначения программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2006, 18:28 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 13:19 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 13:55 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 14:40 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
iV@n..... если основываться на 'iw', то можно так Код: plaintext 1. 2. 3. спасибо, похоже то, что надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 14:43 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
johanna iV@n..... если основываться на 'iw', то можно так Код: plaintext 1. 2. 3. спасибо, похоже то, что надо. нет, опять ошибка: 2004 год 52 неделя все функции считают с ошибками :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 17:53 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
johanna.. нет, опять ошибка: 2004 год 52 неделя все функции считают с ошибками :( ??? Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 18:13 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
johanna johanna iV@n..... если основываться на 'iw', то можно так Код: plaintext 1. 2. 3. спасибо, похоже то, что надо. нет, опять ошибка: 2004 год 52 неделя все функции считают с ошибками :( у orawsh'a вроде хороший запрос. но я и свой поправил Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 18:31 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
orawish johanna.. нет, опять ошибка: 2004 год 52 неделя все функции считают с ошибками :( ??? Код: plaintext 1. 2. 3. 1 я неделя 2004 начинается не 5 января ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 18:31 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
iV@n Код: plaintext 1. 2. 3. тут тоже неправильно в общем случае... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 18:34 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
johanna orawish johanna.. нет, опять ошибка: 2004 год 52 неделя все функции считают с ошибками :( ??? Код: plaintext 1. 2. 3. 1 я неделя 2004 начинается не 5 января А когда? johannaкак получить первый день недели, если известно какая это по счёту неделя и год? т.е. 4 неделя 2006 год = 23.01.2006 Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 18:40 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
orawish А когда? ... 1-я изо неделя начинается 29.12.2003 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 18:45 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
johanna orawish А когда? ... 1-я изо неделя начинается 29.12.2003 "Просто за время пути собака могла подрасти" ;) Условие задачи меняется во время ее выполнения - это обычная ситуация ;)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 18:53 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
тада так Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 18:55 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
orawishтада так Код: plaintext 1. в 2006 году iso-неделя начинается 2 января. 1-я изо неделя должна иметь минимум 4 дня, поэтому она может начинаться в прошлом году, как в 2004 году ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 19:01 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
johanna orawishтада так Код: plaintext 1. в 2006 году iso-неделя начинается 2 января. 1-я изо неделя должна иметь минимум 4 дня, поэтому она может начинаться в прошлом году, как в 2004 году типа этого, значит Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 19:14 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
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 So in order to получить первый день недели, если известно какая это по счёту неделя и год you need: Код: plaintext For example: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 19:21 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
всем спасибо, решили своими силами, и без зависимости от региональных настроек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2006, 11:16 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
Joanna, еще раз обращаю внимание на контекст задачи. У меня был случай, когда в зависимости от контракта (с европейцами или американцами) номер недели вычислялся по-разному. Поэтому любой однозначный алгоритм давал бы ошибку в определении сроков доставки груза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2006, 16:03 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
pan159Joanna, еще раз обращаю внимание на контекст задачи. У меня был случай, когда в зависимости от контракта (с европейцами или американцами) номер недели вычислялся по-разному. Поэтому любой однозначный алгоритм давал бы ошибку в определении сроков доставки груза. спасибо :) для этого я функцию написала, чтоб настройки не подвели ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2006, 18:58 |
|
||
|
первый день недели
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 17:57 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=33511842&tid=1884912]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
148ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 476ms |

| 0 / 0 |
