|
|
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94, ты забавен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 18:36 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Если коротко Norman94А попробовал так Код: sql 1. Дай-ка подумать, почему же '26 янв.' больше чем '20170101'? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 18:37 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
env, *дек * и не '20170101', а как NLS на душу положит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 18:40 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
envenv, *дек * и не '20170101', а как NLS на душу положит Да я уже понял, что это не работает. А вариант, который мне предложили, выдаёт ошибку Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 18:43 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
Norman94envenv, *дек * и не '20170101', а как NLS на душу положит Да я уже понял, что это не работает. А вариант, который мне предложили, выдаёт ошибку Код: sql 1. 2. Код: plsql 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. зы повторно передайте шефу, WITHIN GROUP(ORDER BY 1) ничего не сортирует ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 19:22 |
|
||
|
Значение в виде даты
|
|||
|---|---|---|---|
|
#18+
stax..Norman94пропущено... Да я уже понял, что это не работает. А вариант, который мне предложили, выдаёт ошибку Код: sql 1. 2. Код: plsql 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. зы повторно передайте шефу, WITHIN GROUP(ORDER BY 1) ничего не сортирует ..... stax А, понял, не там ставил эту функцию. Теперь понял. Ещё раз, спасибо Вам! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 19:25 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1886131]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 509ms |

| 0 / 0 |
