powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Time в oracle
25 сообщений из 36, страница 1 из 2
Time в oracle
    #39574511
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Существует таблица 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
Time в oracle
    #39574516
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
to_char(fld_date, 'hh24:mi')
...
Рейтинг: 0 / 0
Time в oracle
    #39574521
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tru55,
ORA - 01843: not a valid month

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


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

Foxey, select distinct extract (month from open_time) from table one
?
...
Рейтинг: 0 / 0
Time в oracle
    #39574545
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Time в oracle
    #39574550
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Time в oracle
    #39574551
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой вместо SET GET

.....
stax
...
Рейтинг: 0 / 0
Time в oracle
    #39574559
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxeyстолбец с типом данных DATA в формате 'dd.mm.yyyy hh24:mi:ss'Нет такого типа данных, а date хранится в формате никак не связанном с форматом отображения.
Ты генеришь слишком много говнокода, не понимая основ.
...
Рейтинг: 0 / 0
Time в oracle
    #39575186
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Time в oracle
    #39575188
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очередной чукча не читатель.

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

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

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

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

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

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

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

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



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

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

потому что to_char не возвращает данные, которые мне нужны. Он вообще ничего не возвращает, кроме одной строчки, которая не входит в диапазон
...
Рейтинг: 0 / 0
Time в oracle
    #39575216
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxeyпотому что to_char не возвращает данные, которые мне нужны.Это потому, что руки кривые, а извилины ровные.
...
Рейтинг: 0 / 0
Time в oracle
    #39575220
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Time в oracle
    #39575221
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибочка вышла

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
Time в oracle
    #39575225
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так принято оформлять 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
Time в oracle
    #39575229
Foxey,

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


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