|
|
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Добрый вечер. Имеется огромная таблица "График" с полями код сотрудника, год, и N1-N52, олицетворяющие 52 недели в году. У какого нибудь N (например N1-N5) стоит значение у, что обозначает учебный отпуск. Всё это достигается путём динамического перебора столбцов и выявления тех, где стоит значение у, причём в виде даты. Например, с 1 января по 26 января. Беда в том, что имеющаяся функция переделывания из N1 в Дату не смотрит на то, как начинаются недели в году. К примеру, в 2017 были недели 1 января, 2 января, 9 января (условие задачи - вне зависимости от года N1 начинается с 1 января). А функция пишет 1 января, 8 января и т.д., что не соответствует истине. То же самое и с другими годами. Подскажите, что я не так делаю? Вот код. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Сама функция преобразования в этой строке Код: sql 1. 2. Как сделать так, что было правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 19:35 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94, ничего не понял с "в 2017 были недели 1 января, 2 января, 9 января " приведите примеры (с разными годами, Nxxx-Nyyy) ф-ция считет так, правильно так первая неделя ВСЕГДА начинается 1-го января, вторая 8-го, и тд? ....... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 20:59 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
stax..ничего не понял с "в 2017 были недели 1 января, 2 января, 9 января " приведите примеры (с разными годами, Nxxx-Nyyy) ф-ция считет так, правильно так То есть по задумке 1 неделя должна начинаться 1 января, полюбому. Например как в 2016 году. Там по сути 1 неделя должна начинаться с 1 января , 2 неделя с 4 января, 3 неделя - 11 января. В 2017 году 1 января, 2 января, 9 января. Странно, но так и должно быть. приведите примеры (с разными годами, Nxxx-Nyyy) ф-ция считет так, правильно так stax..первая неделя ВСЕГДА начинается 1-го января, вторая 8-го, и тд? Да, эта функция при любом году начинает с 1 января, 2 неделю - с 8-го января, что не правильно. Если я ставлю 2017, то должно быть 1 января, 2 января, 9 января, и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 21:05 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94, iw и geatest ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 21:06 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
-2-iw и geatest iw заместо ww подставлять? А geatest как связан? Он вроде наибольшее значение ищет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 21:18 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94, Вариант с iw хорошо помог, спасибо Вам! Теперь встал вопрос, как ему сказать, чтобы он прямо с 1 января считал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 07:05 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94Вариант с iw хорошо помог, спасибо Вам! Теперь встал вопрос, как ему сказать, чтобы он прямо с 1 января считал?А теперь прочитай и вторую половину ответа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 07:40 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94Имеется огромная таблица "График" с полями код сотрудника, год, и N1-N52, олицетворяющие 52 недели в году.я такие таблицы анпивочу вьюхой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 07:45 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Elic, Не понимаю, как мне с помощью geatest, которая находит наибольшее значение, вычислить 1 января. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 08:45 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94Не понимаю, как мне с помощью geatest, которая находит наибольшее значение, вычислить 1 января.а мне некуда ткнуть в Norman94Вариант с iw хорошо помог ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 08:51 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Elic, Вам бы книгу загадок писать iw сделал всё грамотно, но первую неделю он представляет как 26 декабря, вторую - 2 января. Что не есть правда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 09:29 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94iw сделал всё грамотно, но первую неделю он представляет как 26 декабря, вторую - 2 января. Что не есть правда.Включи мозг и сравни каждую из этих дат на большинство с Norman941 января ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 09:36 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Elic, Попробую, но хоть убейте не могу понять как это мне поможет. Можете разжевать принцип? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 10:07 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94Попробую, но хоть убейтеМожет и стоило, Norman94не могу понять как это мне поможет. Можете разжевать принцип?чтобы не приумножать стадо не способных мыслить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 11:36 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94Да, эта функция при любом году начинает с 1 января, 2 неделю - с 8-го января, что не правильно. Если я ставлю 2017, то должно быть 1 января, 2 января, 9 января, и т.д. 1 неделя любого года начинается с 1-го января, но это не всегда понедельник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 15:08 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
https://ru.wikipedia.org/wiki/Неделя#.D0.9A.D0.B0.D0.BB.D0.B5.D0.BD.D0.B4.D0.B0.D1.80.D0.BD.D0.B0.D1.8F_.D0.BD.D0.B5.D0.B4.D0.B5.D0.BB.D1.8F_.D0.B8_.D0.B5.D1.91_.D0.BD.D1.83.D0.BC.D0.B5.D1.80.D0.B0.D1.86.D0.B8.D1.8F первой неделей года считается неделя, содержащая первый четверг года ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 15:49 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94Elic, Вам бы книгу загадок писать iw сделал всё грамотно, но первую неделю он представляет как 26 декабря, вторую - 2 января. Что не есть правда. Код: plsql 1. 2. 3. 4. 5. 6. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 16:01 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94Norman94, Добрый вечер. Имеется огромная таблица "График" с полями код сотрудника, год, и N1-N52, олицетворяющие 52 недели в году. Вариант с iw хорошо помог, спасибо Вам! Теперь встал вопрос, как ему сказать, чтобы он прямо с 1 января считал? ПОВТОРНО! Вам уже писали для IW 53 недели (N53 у вашей нотации) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 16:29 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
stax..Norman94Elic, Вам бы книгу загадок писать iw сделал всё грамотно, но первую неделю он представляет как 26 декабря, вторую - 2 января. Что не есть правда. Код: plsql 1. 2. 3. 4. 5. 6. ..... stax Ага, то есть используя greatest я высчитываю дату, потом сравниваю с датой 01 января определённого года. Значит, получается, будет так? (SELECT listagg('CASE WHEN '||column_name||' IN(''у'') THEN '||''''|| greatest(to_char( trunc (to_date(i_year||'0101', 'yyyymmdd') + ((LTRIM(column_name,'N'))-1)*7, 'ww'), 'dd mon'), date '2017-01-01')||''''|| '||''; '' ELSE NULL END ' ,'||') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 16:55 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Elic, Нужно больше иронии и ненависти, чтобы казаться умным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 16:56 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94Нужно больше иронии и ненависти, чтобы казаться умным.Это как-то уменьшит твою тугодумность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 17:18 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94stax..пропущено... Код: plsql 1. 2. 3. 4. 5. 6. ..... stax Ага, то есть используя greatest я высчитываю дату, потом сравниваю с датой 01 января определённого года. Значит, получается, будет так? (SELECT listagg('CASE WHEN '||column_name||' IN(''у'') THEN '||''''|| greatest(to_char( trunc (to_date(i_year||'0101', 'yyyymmdd') + ((LTRIM(column_name,'N'))-1)*7, 'ww'), 'dd mon'), date '2017-01-01')||''''|| '||''; '' ELSE NULL END ' ,'||') 1) константу date '2017-01-01 заменить на to_date(i_year||'0101', 'yyyymmdd') 2) определится ww или IW 3) имхо не там greatest, надо ...greatest(... , 'iw'),to_date(i_year||'0101', 'yyyymmdd'), 'dd mon')... 4) WITHIN GROUP(ORDER BY 1) ничего не сортирует 5) убедить шефа, что динамика сдесь не нужна ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 17:22 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
stax..1) константу date '2017-01-01 заменить на to_date(i_year||'0101', 'yyyymmdd') 2) определится ww или IW Всё таки iw, потому что с ним недели начинаются именно с тех чисел, что соответствует оному в определённому году. stax..3) имхо не там greatest, надо ...greatest(... , 'iw'),to_date(i_year||'0101', 'yyyymmdd'), 'dd mon')... 4) WITHIN GROUP(ORDER BY 1) ничего не сортирует 5) убедить шефа, что динамика сдесь не нужна Окей, сейчас попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 17:49 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
stax..Norman94пропущено... Ага, то есть используя greatest я высчитываю дату, потом сравниваю с датой 01 января определённого года. Значит, получается, будет так? (SELECT listagg('CASE WHEN '||column_name||' IN(''у'') THEN '||''''|| greatest(to_char( trunc (to_date(i_year||'0101', 'yyyymmdd') + ((LTRIM(column_name,'N'))-1)*7, 'ww'), 'dd mon'), date '2017-01-01')||''''|| '||''; '' ELSE NULL END ' ,'||') 1) константу date '2017-01-01 заменить на to_date(i_year||'0101', 'yyyymmdd') 2) определится ww или IW 3) имхо не там greatest, надо ...greatest(... , 'iw'),to_date(i_year||'0101', 'yyyymmdd'), 'dd mon')... 4) WITHIN GROUP(ORDER BY 1) ничего не сортирует 5) убедить шефа, что динамика сдесь не нужна ..... stax Написал как вы посоветовали Код: sql 1. 2. Функция вылетает с ошибкой мол ожидался номер, а получил дату ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 18:01 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
А попробовал так Код: sql 1. 2. Как неделя с 26 декабря начиналась, так и начинается, эх( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 18:07 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=168&tid=1886131]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 323ms |

| 0 / 0 |
