Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как конвертировать INTERVAL DAY TO SECOND в NUMBER?  [new]
hnkovr
Member

Откуда:
Сообщений: 214
subj
26 окт 06, 14:46    [3315023]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать INTERVAL DAY TO SECOND в NUMBER?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18367
hnkovr
subj

А что должно быть в number?
26 окт 06, 14:49    [3315058]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать INTERVAL DAY TO SECOND в NUMBER?  [new]
Black Dragon
Member

Откуда: Москва
Сообщений: 383
/************************************************
 * Модуль вычисляет время выполнения операции.  *
 *   Время выводиться в формате :               * 
 *      прошло  <дней часов минут секунд>       *
 *   В некоторых случаях возможна погрешность в *
 *   1 секунду                                  *
 *     (причина скорее всего в округлении)      *
 *                                              *
 *     дата создания : 24.10.2006               *
 *     автор         : Black Dragon             *
 ************************************************/
set serveroutput on
declare
  l_start date;
  l_end   date;
  l_dd    number;
  l_hh    number;
  l_mi    number;
  l_ss    number;
  l_rm    number;
begin
  l_start := SysDate;
  
  /* тестируемый код */

  l_end := SysDate;

  l_dd := trunc(l_end - l_start);
  l_rm := (l_end - l_start ) - l_dd;   --остаток в днях
  l_hh := trunc(24*l_rm);
  l_rm := 86400*l_rm - 3600*l_hh;      --остаток в секундах
  l_mi := trunc(l_rm/60);
  l_ss := trunc(l_rm - 60*l_mi);
  dbms_output.put_line(l_dd||' d. '||l_hh||' h. '||l_mi||' mi. '||l_ss||' ss.');
end;

Со зверским уважением
26 окт 06, 14:50    [3315072]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать INTERVAL DAY TO SECOND в NUMBER?  [new]
hnkovr
Member

Откуда:
Сообщений: 214
Ну и где здесь INTERVALы?
26 окт 06, 15:34    [3315463]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать INTERVAL DAY TO SECOND в NUMBER?  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
declare x interval day to second := numtodsinterval(1.5, 'day');
begin
  dbms_output.put_line(x);
  dbms_output.put_line((sysdate + x) - sysdate);
end;
/
26 окт 06, 15:37    [3315485]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать INTERVAL DAY TO SECOND в NUMBER?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
select ss,numtodsinterval(ss,'SECOND') ids from
(select sum(((extract(day from ii)*24 + extract(hour from ii)
             )*60 + extract(minute from ii)
            )*60 + extract(second from ii)
           ) ss
    from (select numtodsinterval(1111111.11,'SECOND') ii from dual
union all select numtodsinterval(2222222.11,'SECOND') from dual
union all select numtodsinterval(3333333.11,'SECOND') from dual
union all select numtodsinterval(4444444.11,'SECOND') from dual
));
26 окт 06, 15:38    [3315495]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать INTERVAL DAY TO SECOND в NUMBER?  [new]
hnkovr
Member

Откуда:
Сообщений: 214
Black Dragon
/************************************************
 * Модуль вычисляет время выполнения операции.  *
 *   Время выводиться в формате :               * 
 *      прошло  <дней часов минут секунд>       *
 *   В некоторых случаях возможна погрешность в *
 *   1 секунду                                  *
 *     (причина скорее всего в округлении)      *
 *                                              *
 *     дата создания : 24.10.2006               *
 *     автор         : Black Dragon             *
 ************************************************/
set serveroutput on
declare
  l_start date;
  l_end   date;
  l_dd    number;
  l_hh    number;
  l_mi    number;
  l_ss    number;
  l_rm    number;
begin
  l_start := SysDate;
  
  /* тестируемый код */

  l_end := SysDate;

  l_dd := trunc(l_end - l_start);
  l_rm := (l_end - l_start ) - l_dd;   --остаток в днях
  l_hh := trunc(24*l_rm);
  l_rm := 86400*l_rm - 3600*l_hh;      --остаток в секундах
  l_mi := trunc(l_rm/60);
  l_ss := trunc(l_rm - 60*l_mi);
  dbms_output.put_line(l_dd||' d. '||l_hh||' h. '||l_mi||' mi. '||l_ss||' ss.');
end;

Со зверским уважением



Кстати, для этого лучше использовать TIMESTAMP, а не DATE - точность будет хоть до милионных (ну реально конечно погрешность будет больше).
Для этого мне subj и нужен - TIMESTAMP - TIMESTAMP выдает INTERVAL, а нужно NUMBER получить...
26 окт 06, 15:39    [3315506]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать INTERVAL DAY TO SECOND в NUMBER?  [new]
Black Dragon
Member

Откуда: Москва
Сообщений: 383
hnkovr
Кстати, для этого лучше использовать TIMESTAMP, а не DATE - точность будет хоть до милионных (ну реально конечно погрешность будет больше).
Для этого мне subj и нужен - TIMESTAMP - TIMESTAMP выдает INTERVAL, а нужно NUMBER получить...


вся эта фигня создавалась для замера времени долгоиграющих операций
которые идут от 30 мин. до нескольких часов, поэтому особой точности
(до долей секунд ) не требовалось
26 окт 06, 15:54    [3315617]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить