powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Дни отпуска
25 сообщений из 156, страница 4 из 7
Дни отпуска
    #39449325
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..Norman94MaximaXXL, stax..

Я безмерно благодарен вам. Я поднастроил всё под себя, взяв от одного варианта и другого, теперь всё получилось!

пропущено...


Прикол в том, что он начинал отсчёт не с понедельника, а с воскресенья. Видимо что то с системными датами напутано..

ето ЗАГОТОВКА, надо допиливать под себя
напр
конец недели я добавлял 5, но мож надо 4 или 6
наскоко помню первая неделя у вас хитрая (greatest ...), соответственно окончание надо тож доработать

с "приколом -6" надо разобраться, в 2018 и далее все будет хорошо?

и тд

......
stax

А сейчас с этим балуюсь

Доработал эти строчки
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
from (
                select Kod_sotr, Vacation, to_number(ltrim(weeks,'N')) Week_Number,
                to_char(
                greatest(
                   trunc (to_date(god, 'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7 +1,'dd mon')
                 ,to_date(god||'0101', 'yyyymmdd'))
             ,'dd mon') Begin_Week,
                to_char(
                greatest(
                   trunc (to_date(god, 'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7 +1,'dd mon')
                 ,to_date(god||'0101', 'yyyymmdd'))
             ,'dd mon') End_Week




Но выскакивает ошибка

too many precision specifiers

В чём может быть дело?
...
Рейтинг: 0 / 0
Дни отпуска
    #39449333
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..наскоко помню первая неделя у вас хитрая (greatest ...), соответственно окончание надо тож доработать
......
stax

подправил

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
declare
 function f ( p_god number,p_kod_sotr number, p_vacation varchar2 :='o')
 return varchar2
is
 l_res varchar2(4000);
 l_list VARCHAR2(32767);
begin
 SELECT listagg(column_name||' as '''||lpad(ltrim(column_name,'N'),2,'0')||'''',',') WITHIN GROUP(ORDER BY null)
 INTO l_list
 FROM user_tab_columns
 WHERE TABLE_NAME = 'GRAFIK' AND column_name LIKE 'N%';
l_list:=q'[
with u as ( --разворачиаем недели вертикально
select * from grafik unpivot (vacation for weeks in (
--сгенеріть із user_tables
]'||l_list||
q'[
))
where god=:g and kod_sotr=:s
)
,w as ( --номеруем для поиска непрырывных
 select
   u.*
--  ,trunc (to_date(god||'0101', 'yyyymmdd') + (weeks-1)*7, 'ww') d
    ,greatest(
     trunc (to_date(god||'0101', 'yyyymmdd')+(weeks-1)*7, 'iw')
     ,to_date(god||'0101', 'yyyymmdd')) d
  ,row_number() over (order by weeks) rn
 from u
 where vacation=:o)
--склеиваем результат в строку
select
 listagg(to_char(min(d),'dd Mon')||':'||
     to_char(least(add_months(trunc(min(d),'y'),12)-1,trunc(max(d)+7,'iw')-1),'dd Mon'),'; ')
 within group (order by min(d)) res
from w
group by god,kod_sotr,d-rn*7
]';
 EXECUTE IMMEDIATE l_list INTO l_res USING p_god,p_kod_sotr,p_vacation;
 return l_res;
end;
begin
 dbms_output.put_line(f(2017,111));
end;
/
SQL> /
01 Січ:01 Січ; 20 Лют:26 Лют

SQL> select * from GRAFIK;

       GOD   KOD_SOTR N N N N N N N N N N N N
---------- ---------- - - - - - - - - - - - -
      2017        222 у   o o у o у o   o
      2017        202   у o o у o у o o o o o
      2017        111 o   у у у   у   o
...
Рейтинг: 0 / 0
Дни отпуска
    #39449336
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..,

А посмотрите в чём у меня может быть ошибка? Почему он ругается?
...
Рейтинг: 0 / 0
Дни отпуска
    #39449340
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94
А сейчас с этим балуюсь

Доработал эти строчки
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
from (
                select Kod_sotr, Vacation, to_number(ltrim(weeks,'N')) Week_Number,
                to_char(
                greatest(
                   trunc (to_date(god, 'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7 +1,'dd mon')
                 ,to_date(god||'0101', 'yyyymmdd'))
             ,'dd mon') Begin_Week,
                to_char(
                greatest(
                   trunc (to_date(god, 'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7 +1,'dd mon')
                 ,to_date(god||'0101', 'yyyymmdd'))
             ,'dd mon') End_Week




Но выскакивает ошибка

too many precision specifiers

В чём может быть дело?
нельзя trunc 'dd mon'


.....
stax
...
Рейтинг: 0 / 0
Дни отпуска
    #39449345
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Norman94
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
to_char(
                greatest(
                   trunc (to_date(god, 'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7 +1,'dd mon')
                 ,to_date(god||'0101', 'yyyymmdd'))
             ,'dd mon') Begin_Week,
                to_char(
                greatest(
                   trunc (to_date(god, 'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7 +1,'dd mon')
                 ,to_date(god||'0101', 'yyyymmdd'))
             ,'dd mon') End_Week



stax..,

Это в какой строчке из?
Код: sql
1.
2.
to_char(greatest( trunc (to_date(god, 'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7 +1,'dd mon'),to_date(god||'0101', 'yyyymmdd')),'dd mon') Begin_Week,
                to_char(greatest( trunc (to_date(god, 'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7 +7,'dd mon'),to_date(god||'0101', 'yyyymmdd')),'dd mon') End_Week



Покажите пожалуйста
...
Рейтинг: 0 / 0
Дни отпуска
    #39449353
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94Norman94
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
to_char(
                greatest(
                   trunc (to_date(god, 'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7 +1,'dd mon')
                 ,to_date(god||'0101', 'yyyymmdd'))
             ,'dd mon') Begin_Week,
                to_char(
                greatest(
                   trunc (to_date(god, 'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7 +1,'dd mon')
                 ,to_date(god||'0101', 'yyyymmdd'))
             ,'dd mon') End_Week



stax..,

Это в какой строчке из?

[/src]

Покажите пожалуйста
...
Рейтинг: 0 / 0
Дни отпуска
    #39449354
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..,

Я немного поменял строки на

Код: sql
1.
2.
to_char(greatest(trunc(to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7+1,'dd mon'), (to_date(to_date(god,'yyyy'),'y'))) Begin_Week,
                 to_char(greatest(trunc(to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7+7,'dd mon'),(to_date(to_date(god,'yyyy'),'y'))) End_Week


Теперь он пишет, что ожидал число а получил дату.
...
Рейтинг: 0 / 0
Дни отпуска
    #39449355
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..,

Но у юзера, что кинул выше в оригинале строки выглядят так, и они работают

Код: sql
1.
2.
 to_char(trunc(to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7 +1,'dd mon') Begin_Week,
                to_char(trunc(to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7+7,'dd mon') End_week
...
Рейтинг: 0 / 0
Дни отпуска
    #39449369
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
to_char(greatest(trunc (to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7,'iw'),to_date(god, 'yyyy'),'dd mon') Begin_Week,
to_char(greatest(trunc (to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7 +6,'iw'),to_date(god, 'yyyy'),'dd mon') End_Week



И даже так теперь не работает. Не могу понять почему.
...
Рейтинг: 0 / 0
Дни отпуска
    #39449370
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..можна по разному, ето один из вариантов, мне кажется самым простым
под рукой только 10 и напильник забыл дома
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with t as (select xmltype(DBMS_XMLGEN.getxml('select * from GRAFIK g where g.god=2017 and g.kod_sotr=1')) xmldata from dual)
select     nodename, nodetext 
from t, xmltable('for $i in //*
       return element root { element name { $i/name() }, element txt { $i/text() } }'
    passing t.xmldata
    columns nodename varchar2(20) path '/root/name',
            nodetext varchar2(30) path '/root/txt'
) where nodename like 'N%' ;
...
Рейтинг: 0 / 0
Дни отпуска
    #39449371
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94stax..,

Я немного поменял строки на

Код: sql
1.
2.
to_char(greatest(trunc(to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7+1,'dd mon'), (to_date(to_date(god,'yyyy'),'y'))) Begin_Week,
                 to_char(greatest(trunc(to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7+7,'dd mon'),(to_date(to_date(god,'yyyy'),'y'))) End_Week


Теперь он пишет, что ожидал число а получил дату.
я ж не знаю что Вы хотите получить

зачем to_date(to_date?

.....
stax
...
Рейтинг: 0 / 0
Дни отпуска
    #39449374
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..,

Понимаете, я хочу, что у меня функция воспринимала даты именно в соответствии с годом. Я знаю что это делается с помощью greatest

Вот строки как выглядят в оригинале:

Код: sql
1.
2.
to_char(trunc(to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7 +1,'dd mon') Begin_Week,
                to_char(trunc(to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7+7,'dd mon') End_week



Я не могу сообразить как greatest сюда подкрутить
...
Рейтинг: 0 / 0
Дни отпуска
    #39449378
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94,

Как и раньше, сначала greatest от дат, а уже потом преобразование в строку
...
Рейтинг: 0 / 0
Дни отпуска
    #39449383
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
envNorman94,

Как и раньше, сначала greatest от дат, а уже потом преобразование в строку

Я так и пытаюсь сделать, вот

Код: sql
1.
2.
to_char(greatest(trunc (to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7,'dd mon'),to_date(god, 'yyyy'),'dd mon') Begin_Week,
to_char(greatest(trunc (to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7 +6,'dd mon'),to_date(god, 'yyyy'),'dd mon') End_Week



Но он пишет, что ждал число, а получил дату
...
Рейтинг: 0 / 0
Дни отпуска
    #39449390
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94envNorman94,

Как и раньше, сначала greatest от дат, а уже потом преобразование в строку

Я так и пытаюсь сделать, вот

Код: sql
1.
2.
to_char(greatest(trunc (to_date(god,'yyyy'),'y' ) зачем?+(to_number(ltrim(weeks,'N'))-1)*7,'dd mon'),
to_date(god, 'yyyy')  нет )  ,'dd mon') Begin_Week,



Но он пишет, что ждал число, а получил дату

ps
Код: plsql
1.
2.
3.
4.
5.
SQL> select to_date(2017,'yyyy') d from dual;

D
--------
01.05.17
...
Рейтинг: 0 / 0
Дни отпуска
    #39449399
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..Norman94пропущено...


Я так и пытаюсь сделать, вот

Код: sql
1.
2.
to_char(greatest(trunc (to_date(god,'yyyy'),'y' ) зачем?+(to_number(ltrim(weeks,'N'))-1)*7,'dd mon'),
to_date(god, 'yyyy')  нет )  ,'dd mon') Begin_Week,




Но он пишет, что ждал число, а получил дату

ps
Код: plsql
1.
2.
3.
4.
5.
SQL> select to_date(2017,'yyyy') d from dual;

D
--------
01.05.17



Код: sql
1.
2.
to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7,'dd mon'),to_date(god, 'yyyy'),'dd mon') Begin_Week,
to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7 +6,'dd mon'),to_date(god, 'yyyy'),'dd mon') End_Week


Missing right parameters
...
Рейтинг: 0 / 0
Дни отпуска
    #39449400
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
иииииииии

Код: sql
1.
2.
to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7,'dd mon')),to_date(god, 'yyyy'),'dd mon') Begin_Week,
to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7 +6,'dd mon')),to_date(god, 'yyyy'),'dd mon') End_Week


Ждал дату, а получил число. Что за чертовщина!
...
Рейтинг: 0 / 0
Дни отпуска
    #39449404
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94Ждал дату, а получил число. Что за чертовщина!
где закрывающая скобка для greatest ?
...
Рейтинг: 0 / 0
Дни отпуска
    #39449407
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123йй,

Код: sql
1.
to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7,'dd mon')[color=red])[/color],to_date(god, 'yyyy'),'dd mon') Begin_Week,
...
Рейтинг: 0 / 0
Дни отпуска
    #39449408
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123ййNorman94Ждал дату, а получил число. Что за чертовщина!
где закрывающая скобка для greatest ?

Короче вот она

Код: sql
1.
to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7,'dd mon')),to_date(god, 'yyyy'),'dd mon') Begin_Week,
...
Рейтинг: 0 / 0
Дни отпуска
    #39449409
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123ййNorman94Ждал дату, а получил число. Что за чертовщина!
где закрывающая скобка для greatest ?

Тьфу ты, не умею в цвета


to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7,'dd mon')),to_date(god, 'yyyy'),'dd mon') Begin_Week,
...
Рейтинг: 0 / 0
Дни отпуска
    #39449412
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно, ошибка больше не выпадает, однако он теперь ОПЯТЬ начисто игнорирует воскресенья. Вообще. То есть теперь всё как раньше. Что я не так делаю?

Вот строки в оригинале:

Код: sql
1.
2.
to_char(trunc(to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7 +1,'dd mon') Begin_Week,
                to_char(trunc(to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7+7,'dd mon') End_week


А вот изменённые.
Код: sql
1.
2.
to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7,'iw'),to_date(god, 'yyyy')),'dd mon') Begin_Week,
to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7 +6,'iw'),to_date(god, 'yyyy')),'dd mon') End_Week
...
Рейтинг: 0 / 0
Дни отпуска
    #39449413
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94123ййпропущено...

где закрывающая скобка для greatest ?

Тьфу ты, не умею в цвета


to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7,'dd mon')),to_date(god, 'yyyy'),'dd mon') Begin_Week,

а надо
to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7,' dd mon '),to_date(god, 'yyyy')),'dd mon') Begin_Week,[/quot]

.........
stax
...
Рейтинг: 0 / 0
Дни отпуска
    #39449415
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..Norman94пропущено...


Тьфу ты, не умею в цвета


to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7,'dd mon')),to_date(god, 'yyyy'),'dd mon') Begin_Week,

а надо
to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7,' dd mon '),to_date(god, 'yyyy')),'dd mon') Begin_Week,

.........
stax[/quote]

Да да, я так сделал, но теперь всё сломалось, функция как и раньше снова считает по первым дням, а не заглядывает в последние дни, как до greatest. Вообще не понимаю в чём дело.
...
Рейтинг: 0 / 0
Дни отпуска
    #39449416
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94Ладно, ошибка больше не выпадает, однако он теперь ОПЯТЬ начисто игнорирует воскресенья. Вообще. То есть теперь всё как раньше. Что я не так делаю?

Вот строки в оригинале:

Код: sql
1.
2.
to_char(trunc(to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7 +1,'dd mon') Begin_Week,
                to_char(trunc(to_date(god,'yyyy'),'y')+(to_number(ltrim(weeks,'N'))-1)*7+7,'dd mon') End_week


А вот изменённые.
Код: sql
1.
2.
to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7,'iw'),to_date(god, 'yyyy')),'dd mon') Begin_Week,
to_char(greatest(trunc (to_date(god,'yyyy')+(to_number(ltrim(weeks,'N'))-1)*7 +6,'iw'),to_date(god, 'yyyy')),'dd mon') End_Week



что за воскресенья?

я ж Вам кинул подправленный вариант 20460313
...
Рейтинг: 0 / 0
25 сообщений из 156, страница 4 из 7
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Дни отпуска
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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