|
|
|
Преобразование чисел в дату
|
|||
|---|---|---|---|
|
#18+
Добрый день. Имеется длинная функция. Она стыкует между собой 52 столбца (N какое то число), что подразумевает собой количество недель в году. На выходе получается, что он выводит мне определённые столбцы, но лишь числа (n я убрал). Теперь как сделать так, чтобы 1 неделя у меня превратилась в 01.01, 2 неделя в 08.01 и так далее, то есть чтобы выводился день новой недели и месяц. У меня сейчас получилось сделать чтобы выводился день( то есть первая неделя - 1, вторая неделя - 8 и т.д.), но последняя неделя вообще получается 36.. Подскажите как это лучше сделать? create or replace FUNCTION get_week_list(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 '||((LTRIM(column_name,'N')*7)-6)||'||'','' 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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 08:26 |
|
||
|
Преобразование чисел в дату
|
|||
|---|---|---|---|
|
#18+
Norman94, Цикл to_date('25.12.2016','dd.mm.yyyy')+7*n, где n - порядковый номер недели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 08:49 |
|
||
|
Преобразование чисел в дату
|
|||
|---|---|---|---|
|
#18+
Мастердат, в моём случае как это будет грамотно выглядеть? А то я пытался поставить to_date (((LTRIM(column_name,'N')*7)-6), ''dd.mm.yyyy''), но он выдаёт ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 08:55 |
|
||
|
Преобразование чисел в дату
|
|||
|---|---|---|---|
|
#18+
Мастердат, подставил таким образом в запрос, пишет неверное число SELECT listagg('CASE WHEN '||column_name||' IN(''у'',''о'') THEN '|| to_date('25.12.2016','dd.mm.yyyy')+7*(LTRIM(column_name,'N'))||'||'','' ELSE NULL END ' ,'||') WITHIN GROUP(ORDER BY 1) FROM user_tab_columns WHERE TABLE_NAME = 'GRAFIK' AND column_name LIKE 'N%'; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 09:11 |
|
||
|
Преобразование чисел в дату
|
|||
|---|---|---|---|
|
#18+
Norman94, про текст ошибки, версию сервера, вид входных данных следует догадаться? Первая неделя - это первые семь дней в году или кусок календарной недели до следующего дня, являющимся началом недели? Неделя начинается в понедельник или в воскресенье? 01.02.2017 - это первое февраля или второе января? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 09:13 |
|
||
|
Преобразование чисел в дату
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, авторпро текст ошибки, версию сервера, вид входных данных следует догадаться? входные данные это число недели, 1, 2 и т.д. автор Первая неделя - это первые семь дней в году или кусок календарной недели до следующего дня, являющимся началом недели? Первая неделя - первые 7 дней в году, то бишь 1 января. 2 неделя - 8 января и т.д. авторНеделя начинается в понедельник или в воскресенье? С 1 января (при этом в условии про день не сказали) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 09:26 |
|
||
|
Преобразование чисел в дату
|
|||
|---|---|---|---|
|
#18+
Опишу ситуацию подробнее. Есть таблица График, в ней поля год, код юзера и 52 недели (n1, n2, n3... n52). График нужен для того, чтобы определять в какие недели у определённого юзера есть отпуск. На выходе с помощью данной функции получается: год id_user Недели отпуска 2017 132131 1,2,3,4 Теперь же нужно сделать так, чтобы в поле недели отпуска выводились к примеру 01.01 - 29.01. В этом вся проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 10:09 |
|
||
|
Преобразование чисел в дату
|
|||
|---|---|---|---|
|
#18+
Norman94, А календарь григорианский, юлианский или стабильный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 10:13 |
|
||
|
Преобразование чисел в дату
|
|||
|---|---|---|---|
|
#18+
трунк+нум-1x7, а какой у нас в данный момент?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 10:16 |
|
||
|
Преобразование чисел в дату
|
|||
|---|---|---|---|
|
#18+
Norman94, что структура таблицы что задача - бред. сотрудники могут взять отпуск на 53 неделе. но даже несмотря на это неспособность к 1 дню года прибавить неделю*7 это жестокий профессиональный приговор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 10:21 |
|
||
|
Преобразование чисел в дату
|
|||
|---|---|---|---|
|
#18+
Vint, Я понимаю, что это бред, и что это жестоко, но тем не менее мне нужно каким то чудом превратить недели в значения дня и месяца. Вот я и прошу тут подсказки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 10:23 |
|
||
|
Преобразование чисел в дату
|
|||
|---|---|---|---|
|
#18+
Norman94, и что тебе мешает взять дату прибавить номер недели умноженной на сем? или за тебя код писать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 16:25 |
|
||
|
Преобразование чисел в дату
|
|||
|---|---|---|---|
|
#18+
Norman94, первая неделя всегда начинается 01.01, вторая 08.01? если так, то банально to_char(to_date("год",'yyyy')+(n-1)*7,'dd.mm') ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 20:46 |
|
||
|
Преобразование чисел в дату
|
|||
|---|---|---|---|
|
#18+
stax..Norman94, первая неделя всегда начинается 01.01, вторая 08.01? если так, то банально to_char(to_date("год",'yyyy')+(n-1)*7,'dd.mm') ..... stax ой to_char( trunc (to_date("год",'yyyy'),'y')+(n-1)*7,'dd.mm') .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 21:07 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39421169&tid=1886269]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
168ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 445ms |

| 0 / 0 |
