Вопрос по oracle – будет

9

пользуем базу данных Oracle.

В нашей таблице отметка времени хранится в секундах с 1970 года, как я могу преобразовать отметку времени, полученную с помощью функции current_timestamp (), в секунды

Ваш Ответ

4   ответа
0

не совсем актуально. Мне пришлось решить другую проблему (например, Oracle хранит временную метку в V $ RMAN_STATUS и V $ RMAN_OUTPUT), и мне пришлось преобразовать ее в дату / время. Я был удивлен, но волшебная дата там не 1970-01-01, а 1987-07-07. Я посмотрел на историю Oracle, и ближайшая дата, о которой я могу вспомнить, это когда они перенесли продукты Oracle в UNIX. Это правильно?

Вот мой SQL

SELECT /*+ rule */
         to_char(min(stamp)/(24*60*60) + date '1987-07-07', 'DD-MON-YYYY HH24:MI:SS') start_tm
       , to_char(to_char(max(stamp)/(24*60*60) + date '1987-07-07', 'DD-MON HH24:MI:SS')) end_tm
FROM V$RMAN_STATUS 
START WITH (RECID, STAMP) =
     (SELECT MAX(session_recid),MAX(session_stamp) FROM V$RMAN_OUTPUT) 
CONNECT BY PRIOR RECID = parent_recid ;
0

DB. Я пробовал разные версии и решения, но правильно работала только одна.

SQL:

SELECT REPLACE((CAST(dat AS DATE) - TO_DATE('19700101', 'YYYYMMDD')) * 86400 + MOD(EXTRACT(SECOND FROM dat), 1), ',', '.') AS millis
FROM (SELECT SYSTIMESTAMP AT TIME ZONE 'GMT' AS dat FROM dual)

Результат для Systmiestamp

2018/12/18 19: 47: 29,080988 +02: 00

будет

1545155249.080988
0

решение но возможно с некоторыми преимуществами.

21

select (cast(current_timestamp as date) - date '1970-01-01')*24*60*60 from dual

Хотя я бы не использовал current_timestamp, если бы меня интересовали только секунды, я бы использовал SYSDATE:

select (SYSDATE - date '1970-01-01')*24*60*60 from dual
Предупреждение: время Unix - GMT / UTC, а системная дата Oracle - местное время. Поэтому не уверен, что это решение будет точным ropata
Я бы добавилROUND() вокруг этого - иначе вы можете получить результат, как1425030807.000000000000000000000000000004, Кроме того, не все ли знают, что в день 86 400 секунд? ;) David Faber

Похожие вопросы