Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Time в oracle / 25 сообщений из 36, страница 1 из 2
22.12.2017, 15:42
    #39574511
Foxey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Существует таблица table_one
В ней находится столбец с типом данных DATA в формате 'dd.mm.yyyy hh24:mi:ss'
Необходимо урезать дату до hh24:mi и сравнить её с двумя другими значениями


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 BEGIN
    SHC_FLT_PKG.SET_BEG_DATE(To_date ('14.12.2017','dd.mm.yyyy'));
    SHC_FLT_PKG.SET_end_DATE(To_date ('14.12.2017','dd.mm.yyyy'));
    SHC_FLT_PKG.SET_FROM_DATE(To_date ('00:00','hh24:mi'));
    SHC_FLT_PKG.SET_TO_DATE(To_date ('13:15','hh24:mi'));
    SHC_FLT_PKG.SET_KE(tt_varchar2(''));
    SHC_FLT_PKG.SET_CLOSE_COD(tt_varchar2(''));
  END;

select
  q.start_date beg, count(*) cnt from table_one q
  where q.DT between SHC_FLT_PKG.GET_BEG_DATE and SHC_FLT_PKG.GET_END_DATE
                                 and (logical_name in (select column_value from table (SHC_FLT_PKG.GET_KE())) 
                                 or (select column_value from table (SHC_FLT_PKG.GET_KE()) where rownum = 1) is null)
                                 and q.resolution_code in (select w.val name from table_two w where w.state_id in (select column_value from 
                                  table (SHC_FLT_PKG.GET_CLOSE_COD()))
                                 or (select column_value from table (SHC_FLT_PKG.GET_CLOSE_COD()) where rownum = 1) is null)  
                                 group by q.start_date
and (q.open_time - trunc(q.open_time)) between (cast(SHC_FLT_PKG.GET_FROM_DATE as DATE) - trunc(cast(SHC_FLT_PKG.GET_FROM_DATE as DATE))) and (cast(SHC_FLT_PKG.GET_TO_DATE as DATE) - trunc(cast(SHC_FLT_PKG.GET_TO_DATE as DATE)))



Не обрезается q.open_time и все время возвращается пустая таблица
Перепробывал уже все. И cast на open_time и такую конструкцию

Код: plsql
1.
and cast(q.open_time as date) between trunc(SHC_FLT_PKG.GET_FROM_DATE) and trunc(SHC_FLT_PKG.GET_TO_DATE)



С любым вариантом шлет по ORA-018**
...
Рейтинг: 0 / 0
22.12.2017, 15:46
    #39574516
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Код: plsql
1.
to_char(fld_date, 'hh24:mi')
...
Рейтинг: 0 / 0
22.12.2017, 15:51
    #39574521
Foxey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
tru55,
ORA - 01843: not a valid month

И это тоже пробовал
...
Рейтинг: 0 / 0
22.12.2017, 16:11
    #39574537
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Три раза перечитал.
Нифига не понял.
Как полагаете, просто старею или запрос ТС слишком гениален для меня?
...
Рейтинг: 0 / 0
22.12.2017, 16:19
    #39574542
j2k
j2k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
andrey_anonymous, посмотрел на
Код: plsql
1.
2.
"group by q.start_date
and ("


дальше разбираться не стал :)

Foxey, select distinct extract (month from open_time) from table one
?
...
Рейтинг: 0 / 0
22.12.2017, 16:20
    #39574545
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Foxeytru55,
ORA - 01843: not a valid month

И это тоже пробовал

слетатает селект ілі блок?

to_char(fld_date, 'hh24 mi ')

у Вас часом не mm?

и еще
обратите внимание на "число"
SQL> select To_date ('13:15','hh24:mi') d from dual;

D
-------------------
01.12.2017 13:15:00


.....
stax
...
Рейтинг: 0 / 0
22.12.2017, 16:28
    #39574550
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Foxey,

если надо open_time c '00:00' по '13:15' ("дату" игногируем);

то самое простое
to_char(open_time,'hh24mi') between
to_char(SHC_FLT_PKG.SET_FROM_DATE,'hh24mi') and to_char(SHC_FLT_PKG.SET_TO_DATE,'hh24mi')

....
stax
...
Рейтинг: 0 / 0
22.12.2017, 16:30
    #39574551
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
ой вместо SET GET

.....
stax
...
Рейтинг: 0 / 0
22.12.2017, 16:42
    #39574559
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Foxeyстолбец с типом данных DATA в формате 'dd.mm.yyyy hh24:mi:ss'Нет такого типа данных, а date хранится в формате никак не связанном с форматом отображения.
Ты генеришь слишком много говнокода, не понимая основ.
...
Рейтинг: 0 / 0
25.12.2017, 09:24
    #39575186
Foxey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Код: plsql
1.
2.
(q.open_time-trunc(q.open_time)) between SHC_FLT_PKG.GET_FROM_DATE - trunc(SHC_FLT_PKG.GET_FROM_DATE) 
and SHC_FLT_PKG.GET_TO_DATE-1/86400 - trunc(SHC_FLT_PKG.GET_TO_DATE-1/86400)



По идее он должен разбивать на колличество секунд и смотреть в диапазоне. На java работает

Код: java
1.
2.
if (!timeFrom.equals(timeTo)){
			sql += " and (q.open_time-trunc(q.open_time)) between (cast(:timeFrom as DATE) - trunc(cast(:timeFrom as DATE))) and (cast(:timeTo as DATE) - trunc(cast(:timeTo as DATE))) \n";



Однако, по факту, в ответ он выводит всю таблицу, не обращая внимание на это условие
...
Рейтинг: 0 / 0
25.12.2017, 09:28
    #39575188
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Очередной чукча не читатель.

Типы данных - изучать.
...
Рейтинг: 0 / 0
25.12.2017, 09:32
    #39575190
Foxey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
dmdmdm,

причем тут это? Запрос из java пашет
...
Рейтинг: 0 / 0
25.12.2017, 09:37
    #39575193
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
FoxeyНа java работаетОна покалечила тебе мозг. Забудь её и начни с основ новог для тебя языка.
Foxey
Код: plsql
1.
2.
SHC_FLT_PKG.GET_FROM_DATE
SHC_FLT_PKG.GET_TO_DATE

1) Передача параметров через глобальные переменные - это путь в неуправляемый ад .
2) Какой тип данных возвращают эти супер-пупер функции?
...
Рейтинг: 0 / 0
25.12.2017, 09:39
    #39575195
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Foxeyпричем тут это? Запрос из java пашетПри том, что ты самонадеянно туп.
...
Рейтинг: 0 / 0
25.12.2017, 09:47
    #39575202
Foxey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Elic,

Глобальные переменные позволяют мне непосредственно в plsql изменять данные и находить нужные значения, мне так удобнее.

Про самонадеенность возможно, про тупость не согласен. Прошу хотя бы ссылку скинуть по данному вопросу, а не сыпать оскорблениями.

Раньше работало - при переносе на plsql - нет.
...
Рейтинг: 0 / 0
25.12.2017, 10:01
    #39575208
проходил мимо...
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
FoxeyРаньше работало - при переносе на plsql - нет.
Извини, но с говнокодом так обычно и бывает - сначала он таки работает
А наводящие вопросы про тип данных, возвращаемый геттерами и почему время берёшь через арифметику, а не to_char уже были. И даже с примерами.
...
Рейтинг: 0 / 0
25.12.2017, 10:02
    #39575210
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Foxeyхотя бы ссылку скинуть по данному вопросу

Oracle Data Types .
...
Рейтинг: 0 / 0
25.12.2017, 10:03
    #39575211
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
FoxeyЗапрос из java пашет

Код: plsql
1.
2.
3.
4.
from ..
where ...
group by ..
and ..



Пашет. Угу. Просто Exception глотается где-то в коде или запрос обрезается после group by излишне умной приблудой.
...
Рейтинг: 0 / 0
25.12.2017, 10:05
    #39575213
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Foxeyпро тупость не согласен. Прошу хотя бы ссылку скинуть по данному вопросу
21055581

Нежелание изучить синтаксис и грамматику языка, с которым работаешь, подойдёт в качестве примера?
...
Рейтинг: 0 / 0
25.12.2017, 10:06
    #39575214
Foxey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
проходил мимо...,

потому что to_char не возвращает данные, которые мне нужны. Он вообще ничего не возвращает, кроме одной строчки, которая не входит в диапазон
...
Рейтинг: 0 / 0
25.12.2017, 10:10
    #39575216
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Foxeyпотому что to_char не возвращает данные, которые мне нужны.Это потому, что руки кривые, а извилины ровные.
...
Рейтинг: 0 / 0
25.12.2017, 10:15
    #39575220
Foxey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
env,

Я не скидываю целый код, потому что проблема у меня в одном месте. Зачем лить сюда все?
Код: 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.
 with s as(select
  q.old beg, count(*) cnt select *  table_one q
                           where q.DT between SHC_FLT_PKG.GET_BEG_DATE and SHC_FLT_PKG.GET_END_DATE
                                 and (logical_name in (select column_value from table (SHC_FLT_PKG.GET_KE())) 
                                 or (select column_value from table (SHC_FLT_PKG.GET_KE()) where rownum = 1) is null) 
                                 and (tpl_id in (select column_value from table (SHC_FLT_PKG.GET_TEMPLATE()))
                                 or (select column_value from table (SHC_FLT_PKG.GET_TEMPLATE()) where rownum = 1) is null) 
                                 and (day_of_week_number in (select column_value from table (SHC_FLT_PKG.GET_DAY_OF_WEEK()))
                                 or (select column_value from table (SHC_FLT_PKG.GET_DAY_OF_WEEK()) where rownum = 1) is null) 
                                 and (q.category in (select q.syspk name from stg_hp_sdcategorym1 q where q.type_id in (select nvl(column_value, q.type_id) from DUAL, table (SHC_FLT_PKG.GET_TYPE())(+))) or q.category is null)
                                 and (q.subcategory in (select q.syspk name from stg_hp_sdsubcategorym1 q where q.category_id in (select nvl(column_value, q.category_id) from DUAL, table (SHC_FLT_PKG.GET_CATEGORY())(+))) or q.subcategory is null)
                                 and (q.product_type in (select q.description from stg_hp_sdaream1 q where q.subcategory_id in (select nvl(column_value, q.subcategory_id) from DUAL, table (SHC_FLT_PKG.GET_SUBCATEGORY())(+))) or q.product_type is null)
                                 and (q.resolution_code in (select q.val name from stg_hp_hpcvaluesm1 q where q.state_id in (select nvl(column_value, q.state_id) from DUAL, table (SHC_FLT_PKG.GET_CLOSE_COD())(+))) or q.resolution_code is null)
                                 and (q.hpc_arrive_type in (select q.value name from stg_hp_hpccodesm1 q where q.code_id in (select nvl(column_value, q.code_id) from DUAL, table (SHC_FLT_PKG.GET_CHANNEL())(+))) or q.hpc_arrive_type is null)
                                 and (q.open_time-trunc(q.open_time)) between SHC_FLT_PKG.GET_FROM_DATE - trunc(SHC_FLT_PKG.GET_FROM_DATE) 
                                 and SHC_FLT_PKG.GET_TO_DATE - 1/86000 - trunc(SHC_FLT_PKG.GET_TO_DATE-1/86000)
                                 group by q.old),
        g as (select distinct c.old beg
                              , c.olde end
              from calendar c
              where c.day between SHC_FLT_PKG.GET_BEG_DATE and SHC_FLT_PKG.GET_END_DATE),
  abc as(select to_char(g.beg, 'dd.mm.yyyy') || '-' || to_char(g.end, 'dd.mm.yyyy') beg,
                sum(s.cnt) cnt
                from s right join g on s.beg = g.beg
                     group by g.beg, g.end order by g.beg)
  select abc.*, avg from abc left join(
                                           select sum(abc.cnt)
                                           , count(*)
                                           , sum(abc.cnt)/count(*) avg from abc)
  on 1 = 1;


У меня конкретная трабла с датами.
Есть q.open_time в котором хранится дата и время, нужно выбирать только те записи, которые в данном промежутке времени. Не только день, например 11/09/2017 - 14/09/2017 но и
Например
11/09/2017 00:00 - 11/09/2017 13:00
11/09/2017 00:00 - 11/09/2017 13:00
11/09/2017 00:00 - 11/09/2017 13:00
...
Рейтинг: 0 / 0
25.12.2017, 10:16
    #39575221
Foxey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Ошибочка вышла

11/09/2017 00:00 - 11/09/2017 13:00
12/09/2017 00:00 - 12/09/2017 13:00
13/09/2017 00:00 - 13/09/2017 13:00
14/09/2017 00:00 - 14/09/2017 13:00
...
Рейтинг: 0 / 0
25.12.2017, 10:20
    #39575225
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Time в oracle
Вот так принято оформлять test case.

Код: plsql
1.
2.
3.
4.
5.
6.
with t as (select '11/09/2017 00:00' s1, '11/09/2017 13:00' s2 from dual union all
select '12/09/2017 00:00' s1,  '12/09/2017 13:00' s2 from dual union all
select '13/09/2017 00:00' s1,  '13/09/2017 13:00' s2 from dual union all
select '14/09/2017 00:00' s1, '14/09/2017 13:00' s2 from dual
)
select s1, s2 from t
...
Рейтинг: 0 / 0
25.12.2017, 10:24
    #39575229
Time в oracle
Foxey,

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


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