PL SQL: как показать наносекунды TIMESTAMP - PullRequest
1 голос
/ 16 марта 2011

У меня есть две метки времени, то есть start = 15-03-11 15:10:10 и finish = 15-03-11 15:10:10, и мне нужно вычесть их ("финиш-старт"), чтобы найти продолжительность. Поскольку их разница заключается в наносекундном уровне, мне нужно преобразовать их в 15: 10: 10.000000001 и 15: 10: 10.000000015 соответственно.

Ответы [ 4 ]

4 голосов
/ 16 марта 2011

Зависит от того, как они были сохранены - настройка по умолчанию для столбцов TIMESTAMP содержит только 6 десятичных разрядов Ссылка на Oracle , поэтому поля должны быть объявлены TIMESTAMP (9), и если это так, то разница также будетнеобходимо объявить как ИНТЕРВАЛ (9)

0 голосов
/ 06 октября 2012

Это сработало для меня. Идея состоит в том, чтобы преобразовать разницу в строку и применить регулярное выражение для извлечения соответствующих частей времени, преобразования этой части в наносекунды и в конце суммирования всех частей. Я сделал только секунды (не час и минуту), но вы поняли идею.

   /* Formatted on 10/5/2012 5:35:08 PM (QP5 v5.149.1003.31008) */
SELECT TO_NUMBER (
          REGEXP_SUBSTR (TO_CHAR (systimestamp - sysdate),
                         '[0-9]{2}',
                         14),
          '99')
       * 1000000000
       + TO_NUMBER (
            REGEXP_SUBSTR (TO_CHAR ( (systimestamp - sysdate) ),
                           '[0-9]{6}',
                           14),
            '999999')
  FROM dual
0 голосов
/ 16 марта 2011

В дополнение к ответам от Zep, Mark и OMG Ponies - конечно, если эти значения загружаются из какого-либо другого источника (например, научного оборудования), который обеспечивает более высокую степень точности, чем то, что поддерживает ваша версия OS / Oracle, тогдаВы можете хранить и манипулировать этими значениями по своему усмотрению.

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

0 голосов
/ 16 марта 2011

Версия, платформа

Прежде всего, речь идет о вашей версии и вашей серверной платформе. ( Прочтите примечание OMG Ponies ) Почему?

  1. версия ? Если вы используете версию, более раннюю, чем Oracle 9i, у вас нет другого выбора, кроме как использовать тип данных «Дата». И вы не можете управлять нативно на языке миллиардных секунд.

  2. Серверная платформа ? Время исходит от операционной системы. Если ваша ОС управляет миллиардами секунд, вы сможете управлять " меткой времени " с миллиардной детализацией.

Esamples: Windows XP или Vista не позволяют управлять миллиардной долей секунды.

Datatypes

Если ваша платформа дБ управляет миллиардными секундами (как Марк уже указал ), вы можете использовать в качестве типов данных: TIMESTAMP (9) и INTERVAL (количество *) 1042 * времени) Интервал дня в секундах (9).

...