powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование значений в дату
25 сообщений из 65, страница 2 из 3
Преобразование значений в дату
    #39423195
Norman94,

Код: sql
1.
lead(Week_Number) over(PARTITION by God order by Kod_sotr) - Week_number 


и
Код: sql
1.
cast(to_char( ... 'dd.mm')as number) Week_Number 



в этом смысле что больше
23.04 или 24.03 ?
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423202
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Преобразователь,

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

24.03

Да, невнимательный я.
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423219
Norman94Имеется огромная таблица График с кодом сотрудника, годом и 52 столбцами N1, N2 и т.д., характеризующими недели.

Format Models
авторWW

Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423710
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня небольшой вопрос на будущее, вдруг в дальнейшем пригодится. Вот у меня сейчас выходит число и месяц цифрами, а как можно будет сделать так, чтобы число месяца поменять на буквенное значение, например 01 января.

Вот здесь преобразовать

Код: sql
1.
2.
3.
4.
rom (
                   select God, Kod_sotr, /*weeks*/
to_char(trunc(to_date(god,'yyyy'),'y')+(cast(ltrim(weeks,'N') as number)-1)*7,'dd.mm') Weeks_D, 
                   Vacation, cast(ltrim(weeks,'N')as number) Week_Number from t2


dd.mm на dd.month как я читал не получилось - функция тут же выдаёт ошибку, и говорит что неверное число. Подскажите, как можно будет поменять на буквенное значение?
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423713
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть в этой функции я подставил вместо mm - mon, и он пишет "missing keyword". Подскажите, что не так?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create or replace FUNCTION get_week_list_prob(i_code IN INTEGER, i_year in integer) RETURN VARCHAR2 IS
  l_list  VARCHAR2(32767);
  l_res   VARCHAR2(4000);
BEGIN
SELECT listagg('CASE WHEN '||column_name||' IN(''б'') THEN '|| to_char( trunc (to_date(i_year||'0101', 'yyyymmdd') 
+ ((LTRIM(column_name,'N'))-1)*7, 'ww'), 'dd.mon')||'||''; '' ELSE NULL END ' ,'||') 
WITHIN GROUP(ORDER BY 1)
  INTO  l_list
  FROM  user_tab_columns
  WHERE TABLE_NAME = 'GRAFIK' 
  AND column_name LIKE 'N%';
EXECUTE IMMEDIATE 'SELECT '||l_list||' FROM GRAFIK WHERE kod_sotr=:A AND god=:year' INTO l_res USING i_code,i_year;
RETURN RTRIM(l_res);
END;
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423722
Norman94dd.mm на dd.month как я читал не получилось - функция тут же выдаёт ошибку, и говорит что неверное число.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> select to_char(trunc(to_date(2017,'yyyy'),'y')+(cast(ltrim('N11','N') as number)-1)*7,'dd.mm') from dual;
TO_CHAR(TRUNC(TO_DATE(2017,'YY
------------------------------
12.03

SQL> select to_char(trunc(to_date(2017,'yyyy'),'y')+(cast(ltrim('N11','N') as number)-1)*7,'dd.month') from dual;
TO_CHAR(TRUNC(TO_DATE(2017,'YY
-----------------------------------
12.март



где ошибка ?
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423726
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94и он пишет "missing keyword "И опять он не про то…
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423731
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Преобразователь,

Вот, прикол в том, что здесь он выдает всё как надо, а вот внутри функции на этой строке

Код: sql
1.
EXECUTE IMMEDIATE 'SELECT '||l_list||' FROM GRAFIK WHERE kod_sotr=:A AND god=:year' INTO l_res USING i_code,i_year;


Уже выпадает ошибка, и он пишет missing keyword
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423760
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

то есть?
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423775
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94то есть? brains
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423779
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

Ну а если без шуток, в чём может быть проблема? Ведь при обычном селекте всё проходит, а в функции он начинает старадать хернёй.
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423787
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94Преобразователь,

Вот, прикол в том, что здесь он выдает всё как надо, а вот внутри функции на этой строке

Код: sql
1.
EXECUTE IMMEDIATE 'SELECT '||l_list||' FROM GRAFIK WHERE kod_sotr=:A AND god=:year' INTO l_res USING i_code,i_year;


Уже выпадает ошибка, и он пишет missing keyword

Код: plsql
1.
dbms_output.println('SELECT '||l_list||' FROM GRAFIK WHERE kod_sotr=:A AND god=:year')
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423788
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
Код: plsql
1.
println



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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create or replace FUNCTION get_week_list_prob(i_code IN INTEGER, i_year in integer) RETURN VARCHAR2 IS
  l_list  VARCHAR2(32767);
  l_res   VARCHAR2(4000);
BEGIN
SELECT listagg('CASE WHEN '||column_name||' IN(''б'') THEN '|| to_char( trunc (to_date(i_year||'0101', 'yyyymmdd') 
+ ((LTRIM(column_name,'N'))-1)*7, 'ww'), 'dd.mon')||'||''; '' ELSE NULL END ' ,'||') 
WITHIN GROUP(ORDER BY 1)
  INTO  l_list
  FROM  user_tab_columns
  WHERE TABLE_NAME = 'GRAFIK' 
  AND column_name LIKE 'N%';
  dbms_output.enable;
  dbms_output.put_line('SELECT '||l_list||' FROM GRAFIK WHERE kod_sotr=:A AND god=:year') ;
--EXECUTE IMMEDIATE 'SELECT '||l_list||' FROM GRAFIK WHERE kod_sotr=:A AND god=:year' INTO l_res USING i_code,i_year;
--RETURN RTRIM(l_res);
END;

SELECT t.god, u.FIO, (regexp_substr (get_week_list_prob(t.kod_sotr,t.god), '^([[:digit:]]+)(,)([[:digit:]]+)(;)') || 
regexp_substr (get_week_list_prob(t.kod_sotr,t.god), '([[:digit:]]+)(,)([[:digit:]]+)(;)$')) as за_свой_счёт FROM GRAFIK t, USERS u 
where t.KOD_SOTR = u.KOD_SOTR;
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423800
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заметил ещё одну странность, не знаю имеет ли это роли, но если допустим задаётся 'dd.mm', то в выходной строке получается (01,01). То есть, всё таки наверное дело в EXECUTE IMMEDIATE?
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423801
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
Код: plsql
1.
println



put_line разумеется


Norman94функция возвращается без аргументов
Код: plsql
1.
--RETURN RTRIM(l_res);


С чего бы это она....

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




put_line разумеется


Norman94функция возвращается без аргументов
Код: plsql
1.
--RETURN RTRIM(l_res);



С чего бы это она....

Сударь, неужели надо настолько разжевывать примитивные вещи? Самообучение - слышали такое слово?

Нет, я понимаю, что раз мы их не указываем, то и соответственно "до свидания", но тем не менее я всегда работал с EXECUTE, а если касался put_line, то никогда не указывал ему доп.аргументов. Чего и спрашиваю у вас как это сделать? Толковых примеров я не нашёл.
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423812
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94,

Сударь, прочитайте хоть какой-то учебник по основам программирования. Любой.
У вас явно не хватает систематизированных знаний по предмету как таковому.

Какой тип данных возвращает ваша функция? Что передаётся в execute immediate и put_line?
Уже задав себе самому эти примитивнейшие вопросы можно придумать пяток путей отладки своего кода.
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423815
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, я поковырялся с put_line и получилось это

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create or replace FUNCTION get_week_list_prob(i_code IN INTEGER, i_year in integer) RETURN VARCHAR2 IS
  l_list  VARCHAR2(32767);
  l_res   VARCHAR2(4000);
BEGIN
SELECT listagg('CASE WHEN '||column_name||' IN(''б'') THEN '|| to_char(trunc(to_date(i_year,'yyyy'),'y')+((LTRIM(column_name, 'N'))-1)*7,'dd.mon')||'||''; '' ELSE NULL END ' ,'||') 
WITHIN GROUP(ORDER BY 1)
  INTO  l_list
  FROM  user_tab_columns
  WHERE TABLE_NAME = 'GRAFIK' 
  AND column_name LIKE 'N%';
 dbms_output.enable;
dbms_output.put_line('SELECT '||l_list||' FROM GRAFIK WHERE kod_sotr=' ||i_code||' AND god=' ||i_year);
l_res:=('SELECT '||l_list||' FROM GRAFIK WHERE kod_sotr=' ||i_code||' AND god=' ||i_year);
return l_res;
---EXECUTE IMMEDIATE 'SELECT '||l_list||' FROM GRAFIK WHERE kod_sotr=:A AND god=:year' INTO l_res USING i_code,i_year;
---RETURN RTRIM(l_res);
END;

SELECT t.god, u.FIO, (regexp_substr (get_week_list_prob(t.kod_sotr,t.god), '^([[:digit:]]+)(,)([[:digit:]]+)(;)') || 
regexp_substr (get_week_list_prob(t.kod_sotr,t.god), '([[:digit:]]+)(,)([[:digit:]]+)(;)$')) as за_свой_счёт FROM GRAFIK t, USERS u 
where t.KOD_SOTR = u.KOD_SOTR;



Теперь же где дата он мне возвращает пустое значение заместо даты.

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

Сударь, прочитайте хоть какой-то учебник по основам программирования. Любой.
У вас явно не хватает систематизированных знаний по предмету как таковому.

Какой тип данных возвращает ваша функция? Что передаётся в execute immediate и put_line?
Уже задав себе самому эти примитивнейшие вопросы можно придумать пяток путей отладки своего кода.

Я уже хз сколько отдалок придумывал, всё безтолку. Я у вас просто прошу помочь понять, почему он напрочь не хочет возвращать тип 'dd.mon', а 'dd.mm' спокойно возвращает. Вот и всё. Какая то нелогичная ошибка, учитывая, что я возвращаю ему строку.
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423834
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94,

Для начала, просто сделайте
Код: plsql
1.
select get_week_list_prob(0,0) s from dual

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

Для начала, просто сделайте
Код: plsql
1.
select get_week_list_prob(0,0) s from dual


и помедитируйте на результат.

Получилось это

Код: sql
1.
SELECT CASE WHEN N01 IN('б') THEN 01.янв||'; ' ELSE NULL END ||CASE WHEN N02 IN('б') THEN 08.янв||'; ' ELSE NULL END |



То есть при таком раскладе всё работает
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423841
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А нет, вру, он вообще выдаёт черти что. Получается, вариант с out_put не работает(
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423845
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94,

Код: plsql
1.
THEN 01.янв||



Подчеркнуть? Жирным выделить? Помахать флажками и дать гудок? Что надо сделать, чтобы вам это бросилось в глаза?
...
Рейтинг: 0 / 0
25 сообщений из 65, страница 2 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование значений в дату
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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