powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Требуется преобразовать текстовую строку в число
31 сообщений из 31, показаны все 2 страниц
Требуется преобразовать текстовую строку в число
    #39466538
CrazyGooDvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, не являюсь специалистом в этой области, но передо мной поставили задачу выводить среднее время нахождения объекта в статусе.
Для этого существует таблица TKSTATUS и поле STATUSTRACKING, все вроде бы просто AVG (STATUSTRACKING).
Но не все так просто, STATUSTRACKING является строковой и имеет не очень определенный формат в различных вариантах:
1) hh:mm:ss
2) hhh:mm:ss
3) hhhh:mm:ss
Еще раз, формат поля не дата, но записано в виде времени прошедшего в состоянии, разделенного двоеточием: часы, минуты, секунды
Возможно стоит hh*24*60 + mm*60 + ss, но я не знаю как это разделить и написать в функцию.
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39466578
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvin,
1) substr+instr вырезать поля
2) перевести в секунды
3) avg
4) обратно в чччч.mm.ss

.....
stax
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39466823
CrazyGooDvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А есть что-нибудь попроще, я думал можно в одном выражении сразу записать и вычисления секунд.
А то как то больно сложно получается, не могу разобраться в работе INSTR (на сколько понял она позволяет определить позицию для вырезания данных для функции SUBSTR).
Я не могу представить как вырезать переменное число символов ограниченных ':' при том в разных случаях по разному ограничены.

Вот примеры полей этой таблицы:
2110:25:03
00:01:02
02:35:67
167:41:26
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39466834
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvin,

Код: plsql
1.
2.
3.
4.
with q as (select '2110:25:03' as z from dual)
select substr(z,1,instr(z,':')-1) as hh
     , substr(z,instr(z,':')+1,instr(substr(z,instr(z,':')+1,length(z)-length(substr(z,1,instr(z,':')))),':')-1) as mi
 from q


Ну и секунды аналогично ;D
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39466854
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvin,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  1  with t as (select '2110:25:03' s from dual)
  2  select
  3   substr(s,1,instr(s,':')-1) h
  4  ,substr(s,instr(s,':')+1,instr(s,':',-1)-instr(s,':')-1) m
  5  ,substr(s,instr(s,':',-1)+1) s
  6* from t
SQL> /

H    M  S
---- -- --
2110 25 03



я так понимаю у вас минуты и секунды строго 2цифры, то можно еще проще

зы
можно регулярками, красывше но медленнее

.....
stax
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39466902
CrazyGooDvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..CrazyGooDvin,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  1  with t as (select '2110:25:03' s from dual)
  2  select
  3   substr(s,1,instr(s,':')-1) h
  4  ,substr(s,instr(s,':')+1,instr(s,':',-1)-instr(s,':')-1) m
  5  ,substr(s,instr(s,':',-1)+1) s
  6* from t
SQL> /

H    M  S
---- -- --
2110 25 03



я так понимаю у вас минуты и секунды строго 2цифры, то можно еще проще

зы
можно регулярками, красывше но медленнее

.....
stax

Я сам написал под свой запрос, только вот не знаю как дальше писать.
select
to_number(substr(STATUSTRACKING, 0, (INSTR (STATUSTRACKING,':'))-1)) as hh,
to_number(substr(STATUSTRACKING, -5, 2)) as mm,
to_number(substr(STATUSTRACKING, -5, 2)) as ss
from TKSTATUS where STATUSTRACKING is not NULL
Нужно теперь определить среднее значение из всех значений, но у меня не получается сложить эти данные to_number(substr(STATUSTRACKING, -5, 2)) почему то возвращает не верное число
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39466917
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvin,

Код: plsql
1.
2.
3.
4.
5.
select 
to_number(substr(STATUSTRACKING, 0, (INSTR (STATUSTRACKING,':'))-1))*60*60 +
to_number(substr(STATUSTRACKING, -5, 2))*60 +
to_number(substr(STATUSTRACKING, -2, 2)) as ss
from TKSTATUS where STATUSTRACKING is not NULL
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39466966
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvin to_number(substr(STATUSTRACKING, -5, 2)) почему то возвращает не верное число
посмотрите що Вам возвращает STATUSTRACKING и substr(STATUSTRACKING, -5, 2), а там и определитесь что дальше делать (как обходіть)

.....
stax
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39466977
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvin,

Если в конце пробел то -5 попадет не в минуты и как следствие не в число
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39466992
CrazyGooDvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DshedooCrazyGooDvin,

Код: plsql
1.
2.
3.
4.
5.
select 
to_number(substr(STATUSTRACKING, 0, (INSTR (STATUSTRACKING,':'))-1))*60*60 +
to_number(substr(STATUSTRACKING, -5, 2))*60 +
to_number(substr(STATUSTRACKING, -2, 2)) as ss
from TKSTATUS where STATUSTRACKING is not NULL


именно, я пошел правда уже чуть дальше
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select round(avg(
to_number(substr(STATUSTRACKING, 0, (INSTR (STATUSTRACKING,':'))-1))*3600 + 
to_number(substr(STATUSTRACKING, -5, 2))*60 +
to_number(substr(STATUSTRACKING, -2, 2)))) as Srednee_znach
from TKSTATUS where STATUSTRACKING is not NULL 
    and status = 'ОТКРЫТ' 
    and CHANGEDATE between (sysdate -7) and (sysdate)



Другой вопрос, тут есть ситуация когда запись с таким статусом встречается несколько раз в таблице по одному и тому же ticketid, в таких случаях эти записи надо просуммировать и лишь потом вычислять среднее, хм или это уже просиходит, не могу сообразить...
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39467005
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CrazyGooDvinDshedooCrazyGooDvin,

Код: plsql
1.
2.
3.
4.
5.
select 
to_number(substr(STATUSTRACKING, 0, (INSTR (STATUSTRACKING,':'))-1))*60*60 +
to_number(substr(STATUSTRACKING, -5, 2))*60 +
to_number(substr(STATUSTRACKING, -2, 2)) as ss
from TKSTATUS where STATUSTRACKING is not NULL


именно, я пошел правда уже чуть дальше
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select round(avg(
to_number(substr(STATUSTRACKING, 0, (INSTR (STATUSTRACKING,':'))-1))*3600 + 
to_number(substr(STATUSTRACKING, -5, 2))*60 +
to_number(substr(STATUSTRACKING, -2, 2)))) as Srednee_znach
from TKSTATUS where STATUSTRACKING is not NULL 
    and status = 'ОТКРЫТ' 
    and CHANGEDATE between (sysdate -7) and (sysdate)



Другой вопрос, тут есть ситуация когда запись с таким статусом встречается несколько раз в таблице по одному и тому же ticketid, в таких случаях эти записи надо просуммировать и лишь потом вычислять среднее, хм или это уже просиходит, не могу сообразить...

что мешает сделать тестовый пример и узнать наверняка??
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39467059
CrazyGooDvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
trace.logCrazyGooDvinпропущено...

именно, я пошел правда уже чуть дальше
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select round(avg(
to_number(substr(STATUSTRACKING, 0, (INSTR (STATUSTRACKING,':'))-1))*3600 + 
to_number(substr(STATUSTRACKING, -5, 2))*60 +
to_number(substr(STATUSTRACKING, -2, 2)))) as Srednee_znach
from TKSTATUS where STATUSTRACKING is not NULL 
    and status = 'ОТКРЫТ' 
    and CHANGEDATE between (sysdate -7) and (sysdate)



Другой вопрос, тут есть ситуация когда запись с таким статусом встречается несколько раз в таблице по одному и тому же ticketid, в таких случаях эти записи надо просуммировать и лишь потом вычислять среднее, хм или это уже просиходит, не могу сообразить...

что мешает сделать тестовый пример и узнать наверняка??
Проверил, считает это разными значениями и это сильно влияет на результат, нужно как то суммировать вначале все времена с одинаковыми статуса и одинаковыми tiketid. Где и как подскажите пожалуйста.
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39467080
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvin,

я не понял проблему
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  1  select deptno,avg(sal_job) a from
  2   (select deptno,sum(sal) sal_job from emp group by deptno,job)
  3* group by deptno
SQL> /

    DEPTNO          A
---------- ----------
        30 3133,33333
        20       3625
        10 2916,66667



....
stax
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39467923
CrazyGooDvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..CrazyGooDvin,

я не понял проблему
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  1  select deptno,avg(sal_job) a from
  2   (select deptno,sum(sal) sal_job from emp group by deptno,job)
  3* group by deptno
SQL> /

    DEPTNO          A
---------- ----------
        30 3133,33333
        20       3625
        10 2916,66667



....
stax

Спасибо, создал свой запрос, не так красиво и стройно, но как умею
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select 
round(avg(Vremya_v_statuse_v_sec)) as Srednee_znach_v_sec
from (
select t.ticketid, sum(
to_number(substr(tk.STATUSTRACKING, 0, (INSTR (tk.STATUSTRACKING,':'))-1))*3600 + 
to_number(substr(tk.STATUSTRACKING, -5, 2))*60 +
to_number(substr(tk.STATUSTRACKING, -2, 2))) as Vremya_v_statuse_v_sec
 from tkstatus tk
inner join TICKET t on t.TICKETID = tk.TICKETID
    where tk.STATUSTRACKING is not NULL 
    and tk.TICKETID = t.ticketid
    and tk.status = 'НАЗНАЧЕН' 
    and t.CLASS = 'ЗУ'
    and tk.CHANGEDATE between TO_TIMESTAMP('2017/05/29 00:00:00', 'yyyy/mm/dd hh24:mi:ss') 
        and TO_TIMESTAMP('2017/05/29 01:00:00', 'yyyy/mm/dd hh24:mi:ss')
group by t.TICKETID)
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39467984
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvin,
У Вас среднеее по всей виборке, поетому можно без подзапроса
вложенные avg(sum())

Код: plsql
1.
2.
3.
4.
5.
6.
select avg(sum(sal)) av from emp
group by deptno
/
        AV
----------
      9675
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39468342
CrazyGooDvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..CrazyGooDvin,
У Вас среднеее по всей виборке, поетому можно без подзапроса
вложенные avg(sum())

Код: plsql
1.
2.
3.
4.
5.
6.
select avg(sum(sal)) av from emp
group by deptno
/
        AV
----------
      9675



Действительно, спасибо! Вот что получилось:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select 
round(avg(sum(
to_number(substr(tk.STATUSTRACKING, 0, (INSTR (tk.STATUSTRACKING,':'))-1))*3600 + 
to_number(substr(tk.STATUSTRACKING, -5, 2))*60 +
to_number(substr(tk.STATUSTRACKING, -2, 2))))) as Srednee_vremya_v_sec
 from tkstatus tk
inner join TICKET t on t.TICKETID = tk.TICKETID
    where tk.STATUSTRACKING is not NULL 
    and tk.TICKETID = t.ticketid
    and tk.status = 'ОТКРЫТ' 
    and t.CLASS = 'ЗУ'
    and t.ACTUALFINISH between (trunc (TO_DATE(sysdate -1),'DDD')) and (trunc (TO_DATE(sysdate),'DDD'))
group by t.TICKETID
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39468734
CrazyGooDvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как получить результат отношения двух count?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select 
(
(to_number(select count(t.ticketid) from ticket t where CLASS = 'ИНЦИДЕНТ' and  t.REPORTDATE between (trunc (TO_DATE(sysdate -1),'DDD')) and (trunc (TO_DATE(sysdate),'DDD'))))
/
(to_number(select count(t.ticketid) from ticket t where CLASS = 'ИНЦИДЕНТ' and  t.actualfinish between (trunc (TO_DATE(sysdate -1),'DDD')) and (trunc (TO_DATE(sysdate),'DDD'))))
)
as rez
 from TICKET
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39468828
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvin,

Что Вы вкладываете в понятие "отношение"?
и стоит ли делать селект из таблицы " from TICKET" в которой более одной записи чтоб получить ОДИН результат. Вы его размножите ...
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39468847
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvin,

не по теме
TO_DATE(sysdate -1)

TO_DATE лишнее (вернее вредное)

.....
stax
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39468848
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvin,

Я бы написал так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select count( case when t.REPORTDATE between (trunc (TO_DATE(sysdate -1),'DDD')) and (trunc (TO_DATE(sysdate),'DDD')) then 1 end)
         /
         count( case when t.actualfinish between (trunc (TO_DATE(sysdate -1),'DDD')) and (trunc (TO_DATE(sysdate),'DDD')) then 1 end)

from ticket t 
where CLASS = 'ИНЦИДЕНТ' 
   and (t.REPORTDATE between (trunc (TO_DATE(sysdate -1),'DDD')) and (trunc (TO_DATE(sysdate),'DDD'))
      or t.actualfinish between (trunc (TO_DATE(sysdate -1),'DDD')) and (trunc (TO_DATE(sysdate),'DDD'))
         )



но подумай над делением на 0
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39468850
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

Согласен, так же как и count в to_number лишнее
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39468852
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXLЯ бы написал так
Код: plsql
1.
2.
3.
TO_DATE(sysdate -1) 
...
TO_DATE(sysdate)


А я бы так не написал...
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39468857
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Да выдернул из оригинала не подумав =)
Вот:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select count( case when t.REPORTDATE between (trunc (sysdate -1,'DDD')) and (trunc (sysdate,'DDD')) then 1 end)
         /
         count( case when t.actualfinish between (trunc (sysdate -1,'DDD')) and (trunc (sysdate,'DDD')) then 1 end)

from ticket t 
where CLASS = 'ИНЦИДЕНТ' 
   and (t.REPORTDATE between (trunc (sysdate -1,'DDD')) and (trunc (sysdate,'DDD'))
      or t.actualfinish between (trunc (sysdate -1,'DDD')) and (trunc (sysdate,'DDD'))
         )
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39468865
CrazyGooDvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLCrazyGooDvin,

Что Вы вкладываете в понятие "отношение"?
и стоит ли делать селект из таблицы " from TICKET" в которой более одной записи чтоб получить ОДИН результат. Вы его размножите ...
Деление результат одного запроса на результат другого запроса
авторCrazyGooDvin,

не по теме
TO_DATE(sysdate -1)

TO_DATE лишнее (вернее вредное)

.....
stax

авторCrazyGooDvin,

Я бы написал так
select count( case when t.REPORTDATE between (trunc (TO_DATE(sysdate -1),'DDD')) and (trunc (TO_DATE(sysdate),'DDD')) then 1 end)
/
count( case when t.actualfinish between (trunc (TO_DATE(sysdate -1),'DDD')) and (trunc (TO_DATE(sysdate),'DDD')) then 1 end)

from ticket t
where CLASS = 'ИНЦИДЕНТ'
and (t.REPORTDATE between (trunc (TO_DATE(sysdate -1),'DDD')) and (trunc (TO_DATE(sysdate),'DDD'))
or t.actualfinish between (trunc (TO_DATE(sysdate -1),'DDD')) and (trunc (TO_DATE(sysdate),'DDD'))
)



но подумай над делением на 0
не работает, пишет from нету где ожидался


авторMaximaXXL

Я бы написал так
TO_DATE(sysdate -1)
...
TO_DATE(sysdate)



А я бы так не написал...
А как иначе?
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39468877
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvin,

to_date(sysdate)

из-за неявного перобразование получим шо-то типа
TO_DATE(TO_CHAR(SYSDATE))
тоесть дату в строку, а строку обратно в дату

похожая история и с to_number(count(*))

.....
stax
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39468887
CrazyGooDvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..CrazyGooDvin,

to_date(sysdate)

из-за неявного перобразование получим шо-то типа
TO_DATE(TO_CHAR(SYSDATE))
тоесть дату в строку, а строку обратно в дату

похожая история и с to_number(count(*))

.....
stax

там надо ограничить результат по датам относительно текущий вчерашний день с 00-00-00 по сегодняшний день 00-00-00, если есть другой способ так сделать хотел бы услышать.
про to_number(count(*)) знаю, это дописал потому что думал, что нужно сделать преобразование что бы деление сработало, но это не помогло.
Все еще не знаю как вывести такой результат, утыкаюсь в логику которой я не знаю
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39468894
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvin,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with ticket as(
select 'ИНЦИДЕНТ' CLASS, sysdate -2 REPORTDATE, sysdate    actualfinish from dual union all
select 'ИНЦИДЕНТ' CLASS, sysdate -1 REPORTDATE, sysdate -1 actualfinish from dual union all
select 'ИНЦИДЕНТ' CLASS, sysdate    REPORTDATE, sysdate -1 actualfinish from dual union all
select 'ИНЦИДЕНТ' CLASS, sysdate -2   REPORTDATE, sysdate -1    actualfinish from dual union all
select 'ИНЦИДЕНТ' CLASS, sysdate -3   REPORTDATE, sysdate    actualfinish from dual )

select count( case when t.REPORTDATE between trunc (sysdate -1,'DDD') and trunc (sysdate,'DDD') then 1 end)/count( case when t.actualfinish between trunc (sysdate -1,'DDD') and trunc (sysdate,'DDD') then 1 end) cnt

from ticket t 
where CLASS = 'ИНЦИДЕНТ' 
   and (t.REPORTDATE between trunc (sysdate -1,'DDD') and trunc (sysdate,'DDD')
      or t.actualfinish between trunc (sysdate -1,'DDD') and trunc (sysdate,'DDD')
         )



Работает
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39468895
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvin[.. утыкаюсь в логику которой я не знаю
элементарно, иногда думать и не преобразовывать параноидально уже число в число же и т.п.
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39468907
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvinтам надо ограничить результат по датам относительно текущий вчерашний день с 00-00-00 по сегодняшний день 00-00-00, если есть другой способ так сделать хотел бы услышать.

between c датами неудобно работать, я пользую >=, <

between trunc (sysdate -1,'DDD') and trunc (sysdate,'DDD')
означает весь день за вчера и первая секунда сегодня (больше сутки)

зы
я из-за лентяйства маску 'DDD' тож не пишу (trunc(sysdate))

.....
stax
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39469156
CrazyGooDvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLCrazyGooDvin,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with ticket as(
select 'ИНЦИДЕНТ' CLASS, sysdate -2 REPORTDATE, sysdate    actualfinish from dual union all
select 'ИНЦИДЕНТ' CLASS, sysdate -1 REPORTDATE, sysdate -1 actualfinish from dual union all
select 'ИНЦИДЕНТ' CLASS, sysdate    REPORTDATE, sysdate -1 actualfinish from dual union all
select 'ИНЦИДЕНТ' CLASS, sysdate -2   REPORTDATE, sysdate -1    actualfinish from dual union all
select 'ИНЦИДЕНТ' CLASS, sysdate -3   REPORTDATE, sysdate    actualfinish from dual )

select count( case when t.REPORTDATE between trunc (sysdate -1,'DDD') and trunc (sysdate,'DDD') then 1 end)/count( case when t.actualfinish between trunc (sysdate -1,'DDD') and trunc (sysdate,'DDD') then 1 end) cnt

from ticket t 
where CLASS = 'ИНЦИДЕНТ' 
   and (t.REPORTDATE between trunc (sysdate -1,'DDD') and trunc (sysdate,'DDD')
      or t.actualfinish between trunc (sysdate -1,'DDD') and trunc (sysdate,'DDD')
         )



Работает

Это работает, а верхняя часть это для подставки результатов? Мне же нужно только с select count?

авторCrazyGooDvin

[.. утыкаюсь в логику которой я не знаю

элементарно, иногда думать и не преобразовывать параноидально уже число в число же и т.п.
Согласен, простите за нубизм...
авторCrazyGooDvin

там надо ограничить результат по датам относительно текущий вчерашний день с 00-00-00 по сегодняшний день 00-00-00, если есть другой способ так сделать хотел бы услышать.


between c датами неудобно работать, я пользую >=, <

between trunc (sysdate -1,'DDD') and trunc (sysdate,'DDD')
означает весь день за вчера и первая секунда сегодня (больше сутки)

зы
я из-за лентяйства маску 'DDD' тож не пишу (trunc(sysdate))

.....
stax
без DDD не ограничишь до нулей время, а надо...
...
Рейтинг: 0 / 0
Требуется преобразовать текстовую строку в число
    #39469190
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyGooDvinбез DDD не ограничишь до нулей время, а надо...
Код: plsql
1.
2.
3.
4.
5.
SQL> select to_char(trunc(sysdate),'dd.mm.yyyy hh24:mi:ss') d from dual;

D
-------------------
09.06.2017 00:00:00



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


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