Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Конвертировать интервал в число / 6 сообщений из 6, страница 1 из 1
19.12.2017, 20:07
    #39572259
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертировать интервал в число
Добрый вечер.
Подскажите, пожалуйста, есть ли функция, обратная функции numtodsinterval.
То есть та, которая конвертирует interval_to_second в number.
Пример
Есть 2 даты
Код: plsql
1.
select (to_timestamp('18.12.17 20:37:44.140000', 'dd.mm.yy hh24:mi:ss.ff') -to_timestamp('18.12.17 20:26:57', 'dd.mm.yy hh24:mi:ss.ff')) from dual


На выходе получу
Код: plsql
1.
+000000000 00:10:47


Их разность равна
Код: plsql
1.
646802

.
Возможно, миллисекунды, затрудняюсь сказать.
Не нашел каких-то похожих вариантов конвертирования.
Пробовал через extract, но скорее всего, где-то ошибся.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select (sysdate +
       (to_timestamp('18.12.17 20:37:44.140000', 'dd.mm.yy hh24:mi:ss.ff') -
       to_timestamp('18.12.17 20:26:57', 'dd.mm.yy hh24:mi:ss.ff')) -
       sysdate) * 86400 +
       mod(extract(second from(to_timestamp('18.12.17 20:37:44.140000',
                                     'dd.mm.yy hh24:mi:ss.ff') -
                        to_timestamp('18.12.17 20:26:57',
                                     'dd.mm.yy hh24:mi:ss.ff'))),
           1)
from dual


Help plz!
...
Рейтинг: 0 / 0
19.12.2017, 20:20
    #39572262
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертировать интервал в число
Прошу прощения, вторая дата
Код: plsql
1.
2.
to_timestamp('18.12.17 20:26:57.338000',
                                     'dd.mm.yy hh24:mi:ss.ff')
...
Рейтинг: 0 / 0
19.12.2017, 20:26
    #39572265
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертировать интервал в число
При умжножении результат почти сходится, но все же
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select ((sysdate +
       (to_timestamp('18.12.17 20:37:44.140000', 'dd.mm.yy hh24:mi:ss.ff') -
       to_timestamp('18.12.17 20:26:57', 'dd.mm.yy hh24:mi:ss.ff')) -
       sysdate) * 86400 +
       mod(extract(second from(to_timestamp('18.12.17 20:37:44.140000',
                                     'dd.mm.yy hh24:mi:ss.ff') -
                        to_timestamp('18.12.17 20:26:57.338000',
                                     'dd.mm.yy hh24:mi:ss.ff'))),
           1))*1000
from dual



Код: plsql
1.
647802


Отличается всего-то на 1000:)
...
Рейтинг: 0 / 0
19.12.2017, 20:30
    #39572269
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертировать интервал в число
Все, разобрался
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select ((sysdate +
       (to_timestamp('18.12.17 20:37:44.140000', 'dd.mm.yy hh24:mi:ss.ff') -
       to_timestamp('18.12.17 20:26:57.338000', 'dd.mm.yy hh24:mi:ss.ff')) -
       sysdate) * 86400 +
       mod(extract(second from(to_timestamp('18.12.17 20:37:44.140000',
                                     'dd.mm.yy hh24:mi:ss.ff') -
                        to_timestamp('18.12.17 20:26:57.338000',
                                     'dd.mm.yy hh24:mi:ss.ff'))),
           1))*1000
from dual


Вот конечный вариант. Злую шутку сыграл отсутствующий после точки штамп:) Всем спасибо.
...
Рейтинг: 0 / 0
19.12.2017, 21:36
    #39572299
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертировать интервал в число
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with t as (select to_timestamp('18.12.17 20:26:57.338000', 'dd.mm.yy hh24:mi:ss.ff') ts1
                , to_timestamp('18.12.17 20:37:44.140000', 'dd.mm.yy hh24:mi:ss.ff') ts2
            from dual
        union all select systimestamp-1/3, systimestamp from dual
        union all select systimestamp-1/3, systimestamp+10 from dual
            )
select ts2-ts1 the_interval
       , ((sysdate + (ts2 - ts1) - sysdate) * 86400 
        + mod(extract(second from(ts2 -ts1)), 1))*1000 author_way
       , 1000*(extract(day from(ts2 -ts1))*86400
       + extract(hour from(ts2 -ts1))*3600
       + extract(minute from(ts2 -ts1))*60
       + extract(second from(ts2 -ts1))) extract_way
       , (to_number(to_char(ts2,'J'))-to_number(to_char(ts1,'J')))*86400*1000
       + (to_number(to_char(ts2,'SSSSSFF6'))-to_number(to_char(ts1,'SSSSSFF6')))/1000
       string_way
--       , (sysdate + (ts2 - ts1)*86400 - sysdate) trick_way -- fail on long intervals
from t
...
Рейтинг: 0 / 0
20.12.2017, 07:36
    #39572442
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертировать интервал в число
Reflectorесть ли функция, обратная функции numtodsinterval.Делов-то, чтоб ей быть.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
---------
function Interval2Sec(aInterval dsinterval_unconstrained) return number
is
begin
  return extract(day    from (aInterval))*24*60*60
       + extract(hour   from (aInterval))   *60*60
       + extract(minute from (aInterval))      *60
       + extract(second from (aInterval))
  ;
end Interval2Sec;

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


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