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

Откуда:
Сообщений: 14
Добрый день!

У меня есть таблица,которая представлена ниже.

--Этим запросом я нахожу разницу между двумя таймстемпами,которая отображается в столбце PERIOD.
select START_TIME,END_TIME,(END_TIME-START_TIME) as PERIOD

START_TIME END_TIME PERIOD

08-APR-14 08.21.12.690000000 AM 08-APR-14 08.21.12.710000000 AM 0 0:0:0.20000000
08-APR-14 08.21.12.710000000 AM 08-APR-14 08.21.12.838000000 AM 0 0:0:0.128000000
08-APR-14 08.21.12.838000000 AM 08-APR-14 08.21.16.488000000 AM 0 0:0:3.650000000
08-APR-14 08.21.16.488000000 AM 08-APR-14 08.23.59.935000000 AM 0 0:2:43.447000000


--Здесь я умножаю значения столбца PERIOD на 86400*1000 (кол-во миллисикунд в сутках). Получаю кол-во дней и "0:0:0.0"

select START_TIME,END_TIME, ((END_TIME-START_TIME)*(86400)*1000) as PERIOD

START_TIME END_TIME PERIOD

08-APR-14 08.21.12.690000000 AM 08-APR-14 08.21.12.710000000 AM 20 0:0:0.0
08-APR-14 08.21.12.710000000 AM 08-APR-14 08.21.12.838000000 AM 128 0:0:0.0
08-APR-14 08.21.12.838000000 AM 08-APR-14 08.21.16.488000000 AM 3650 0:0:0.0
08-APR-14 08.21.16.488000000 AM 08-APR-14 08.23.59.935000000 AM 163447 0:0:0.0


В столбце PERIOD на самом деле получилось кол-во дней,но численно это равняется кол-ву миллисекунд.

Как мне из столбца PERIOD вытащить только кол-во дней? (т.е. избавиться от нулей) и,тем самым получить кол-во миллисекунд между двумя таймстемпами.

P.S. Возможно,за последние годы,у Оракла,наконец-таки появилась лаконичная функция по возвращению кол-ва миллисекунд между двумя датами. Или если есть другой лаконичный способ решить эту задачу,подскажите ,пожалуйста.

Спасибо!
8 апр 14, 19:13    [15851927]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
ded-mazay
Member

Откуда:
Сообщений: 260
TRUC, TO_DATE?
8 апр 14, 19:25    [15851984]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51767

Varandey
Возможно,за последние годы,у Оракла,наконец-таки появилась лаконичная
функция по возвращению кол-ва миллисекунд между двумя датами.

EXTRACT для тебя недостаточно лаконичен?..

Posted via ActualForum NNTP Server 1.5

8 апр 14, 19:33    [15852023]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
Elic
Member

Откуда:
Сообщений: 29978
Varandey
я умножаю значения столбца PERIOD на 86400*1000 (кол-во миллисикунд в сутках)
С предельным количеством таких миллисекунд знаком?
9 апр 14, 08:54    [15853733]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
Varandey
Member

Откуда:
Сообщений: 14
Спасибо большое за подсказку.

Пытаюсь применить EXTRACT к ((END_TIME-START_TIME)*(86400)*1000) Чтобы вытащить из столбца PERIOD только кол-во дней.

Прочитал справку по EXTRACT.

Исходные значения столбца PERIOD(как видно,он имеет формат DD HH24:MI:SS) :

20 0:0:0.0
128 0:0:0.0
3650 0:0:0.0
163447 0:0:0.0

--Преобразовываю значение из столбца PERIOD в дату,в формат DD HH24:MI:SS(хотя она и так в этом формате)
-- и применяю EXTRACT

SELECT EXTRACT (DAY FROM TO_DATE(PERIOD,'DD HH24:MI:SS'))
FROM
(
select START_TIME,END_TIME, ((END_TIME-START_TIME)*(86400)*1000) as PERIOD
)

Однако, получаю ошибку "ORA-01847: day of month must be between 1 and last of month"

Подскажите,пожалуйста,что я делаю не так?
9 апр 14, 09:31    [15853874]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
Varandey
Member

Откуда:
Сообщений: 14
Elic
Varandey
я умножаю значения столбца PERIOD на 86400*1000 (кол-во миллисекунд в сутках)
С предельным количеством таких миллисекунд знаком?


Нет,что Вы имеете в виду?

Я знаю,что разница между таймстемпами будет не больше 10 минут,т.е. в столбце PERIOD я получу максимум 600 000.
9 апр 14, 09:35    [15853893]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
roadster
Member [заблокирован]

Откуда: "Церковь тяжеловооружённого Христа" ©
Сообщений: 52495
Varandey
Исходные значения столбца PERIOD(как видно,он имеет формат DD HH24:MI:SS) :

20 0:0:0.0
128 0:0:0.0
3650 0:0:0.0
163447 0:0:0.0
день - это дата в месяце. я допускаю наличие календарей, в которых есть 128 декабря, 3650 февраля или 163447 июля, но Oracle про такие даты не знает, о чём и говорит
Varandey
"ORA-01847: day of month must be between 1 and last of month"


зачем использовать экстракт мне лично непонятно, про TRUNC уже писали.

ЗЫ но я так и не понял
Varandey
Как мне из столбца PERIOD вытащить только кол-во дней? (т.е. избавиться от нулей) и,тем самым получить кол-во миллисекунд между двумя таймстемпами.

что это значит
9 апр 14, 09:48    [15853960]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
Elic
Member

Откуда:
Сообщений: 29978
Varandey
Я знаю,что разница между таймстемпами будет не больше 10 минут
Молись, чтоб по по какой-нибудь ошибке не оказалась 12 дней.
9 апр 14, 09:48    [15853961]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
roadster
Member [заблокирован]

Откуда: "Церковь тяжеловооружённого Христа" ©
Сообщений: 52495
Varandey
Я знаю,что разница между таймстемпами будет не больше 10 минут,т.е. в столбце PERIOD я получу максимум 600 000.
и при чём здесь дни?
ты сам-то знаешь чего чтебе надо?
9 апр 14, 09:49    [15853968]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
-2-
Member

Откуда:
Сообщений: 15330
roadster
Varandey
Исходные значения столбца PERIOD(как видно,он имеет формат DD HH24:MI:SS) :

20 0:0:0.0
128 0:0:0.0
3650 0:0:0.0
163447 0:0:0.0
день - это дата в месяце.
а сутки?
Varandey
лаконичная функция по возвращению кол-ва миллисекунд между двумя датами.
напиши свою через сумму четырех extractов и дальше будет лаконично.
9 апр 14, 10:04    [15854050]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
roadster
Member [заблокирован]

Откуда: "Церковь тяжеловооружённого Христа" ©
Сообщений: 52495
-2-
а сутки?
что "сутки"?
экстракт вытаскивает именно число из даты, к тому же ругается у него на
автор
TO_DATE(PERIOD,'DD HH24:MI:SS')
по моему ругается вполне логично.
9 апр 14, 10:08    [15854083]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
Varandey
Member

Откуда:
Сообщений: 14
зачем использовать экстракт мне лично непонятно, про TRUNC уже писали.


Varandey
Как мне из столбца PERIOD вытащить только кол-во дней? (т.е. избавиться от нулей) и,тем самым получить кол-во миллисекунд между двумя таймстемпами.

что это значит[/quot]


Это значит,что нужно из этих строк:
20 0:0:0.0
128 0:0:0.0
3650 0:0:0.0
163447 0:0:0.0

получить только цифры:
20
128
3650
163447


Ума не приложу как применить TRUNC к столбцу PERIOD.
9 апр 14, 11:23    [15854647]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
123йй
Member

Откуда:
Сообщений: 1635
Varandey,

а зачем его к PERIOD применять ?
9 апр 14, 11:26    [15854666]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
-2-
Member

Откуда:
Сообщений: 15330
Varandey
зачем использовать экстракт мне лично непонятно
арифметика+экстракт+арифметика, никаких преобразований типов.
9 апр 14, 11:28    [15854678]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
roadster
Member [заблокирован]

Откуда: "Церковь тяжеловооружённого Христа" ©
Сообщений: 52495
Varandey
Это значит,что нужно из этих строк:
20 0:0:0.0
128 0:0:0.0
3650 0:0:0.0
163447 0:0:0.0

получить только цифры:
20
128
3650
163447
TO_NUMBER((END_TIME-START_TIME)*(86400)*1000)
TO_CHAR((END_TIME-START_TIME)*(86400)*1000)

ни транк ни экстракт не нужен.
9 апр 14, 11:44    [15854780]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
-2-
Member

Откуда:
Сообщений: 15330
roadster
TO_NUMBER((END_TIME-START_TIME)*(86400)*1000)
TO_CHAR((END_TIME-START_TIME)*(86400)*1000)

ни транк ни экстракт не нужен.
select to_number((systimestamp-timestamp '2014-01-01 00:00:00')*86400*1000) from dual;

ORA-01873: главная точность интервала слишком мала
9 апр 14, 11:48    [15854808]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
roadster
Member [заблокирован]

Откуда: "Церковь тяжеловооружённого Христа" ©
Сообщений: 52495
-2-
roadster
TO_NUMBER((END_TIME-START_TIME)*(86400)*1000)

TO_CHAR((END_TIME-START_TIME)*(86400)*1000)


ни транк ни экстракт не нужен.
select to_number((systimestamp-timestamp '2014-01-01 00:00:00')*86400*1000) from dual;

ORA-01873: главная точность интервала слишком мала
для поля типа DATE следует выполнять
select to_number((sysdate-to_date('2014-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))*86400*1000) from dual;

ЗЫ с таймстампом я не разбирался.
9 апр 14, 11:53    [15854852]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
rtff разность timestamp
9 апр 14, 12:01    [15854924]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
123йй
Member

Откуда:
Сообщений: 1635
roadster
для поля типа DATE

у него не существует миллисекунд
9 апр 14, 12:13    [15855016]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
roadster
Member [заблокирован]

Откуда: "Церковь тяжеловооружённого Христа" ©
Сообщений: 52495
123йй
roadster
для поля типа DATE

у него не существует миллисекунд
хм.
не учёл.
но смысл, я думаю, понятен.
9 апр 14, 12:24    [15855125]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
Varandey
Member

Откуда:
Сообщений: 14
Всем спасибо за подсказки.
Я разобрался.

Значит так,по порядку.

Есть таблица с таймстемпами.
(точки понаставил,чтобы было удобнее видеть таблицу)

select START_TIME,END_TIME

START_TIME........................................END_TIME PERIOD

08-APR-14 08.21.12.690000000 AM....08-APR-14 08.21.12.710000000 AM
08-APR-14 08.21.12.710000000 AM....08-APR-14 08.21.12.838000000 AM
08-APR-14 08.21.12.838000000 AM....08-APR-14 08.21.16.488000000 AM
08-APR-14 08.21.16.488000000 AM....08-APR-14 08.23.59.935000000 AM

Вычисляю разницу между таймстемпами простым вычитанием,затем умножаю на 86400*1000,получаю кол-во дней:

select START_TIME,END_TIME, ((END_TIME-START_TIME)*(86400)*1000) as PERIOD

START_TIME....................................END_TIME PERIOD......................................PERIOD

08-APR-14 08.21.12.690000000......AM 08-APR-14 08.21.12.710000000 AM......20 0:0:0.0
08-APR-14 08.21.12.710000000......AM 08-APR-14 08.21.12.838000000 AM......128 0:0:0.0
08-APR-14 08.21.12.838000000......AM 08-APR-14 08.21.16.488000000 AM......3650 0:0:0.0
08-APR-14 08.21.16.488000000......AM 08-APR-14 08.23.59.935000000 AM......163447 0:0:0.0

Кол-во дней в столбце ЧИСЛЕННО равно кол-ву миллисекунд между таймстемпами (я думаю,здесь понятно)

Вытаскиваю кол-во дней из столбца PERIOD с помощью функции EXTRACT:

select START_TIME,END_TIME, EXTRACT(DAY FROM (END_TIME-START_TIME)*(86400)*1000) as PERIOD
Получаю:

START_TIME....................................END_TIME PERIOD......................................PERIOD

08-APR-14 08.21.12.690000000......AM 08-APR-14 08.21.12.710000000 AM......20
08-APR-14 08.21.12.710000000......AM 08-APR-14 08.21.12.838000000 AM......128
08-APR-14 08.21.12.838000000......AM 08-APR-14 08.21.16.488000000 AM......3650
08-APR-14 08.21.16.488000000......AM 08-APR-14 08.23.59.935000000 AM......163447

В столбце PERIOD получились значения,численно равные кол-ву миллисекунд между таймстемпами.
Вот,в принципе и всё.
Если у Вас есть предложения как сделать это лучше,пишите.
Спасибо!
9 апр 14, 12:40    [15855302]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
Varandey
Member

Откуда:
Сообщений: 14
не обращайте внимание на

START_TIME....................................END_TIME PERIOD......................................PERIOD

слово PERIOD сразу после END_TIME
это опечатка,а как тут сообщения править,я не знаю
9 апр 14, 12:44    [15855339]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
roadster
Member [заблокирован]

Откуда: "Церковь тяжеловооружённого Христа" ©
Сообщений: 52495
Varandey
а как тут сообщения править,я не знаю
их здесь нельзя править.
но здесь есть замечательные кнопочки, SRC например
9 апр 14, 12:54    [15855397]     Ответить | Цитировать Сообщить модератору
 Re: Разность между TIMESTAMP  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Varandey
Всем спасибо за подсказки.
Я разобрался.
..

на самом деле - вам еще предстоит удариться об ora-01873
вот - почитайте про неё баян
9 апр 14, 12:58    [15855427]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить