2012-05-11 2 views
2

У меня есть метка времени, хранящееся на столе в базе данных Oracle, например:Преобразование метки времени Oracle на секунды от эпохи

01/03/12 16:13:33,000000000 

Я хочу, чтобы преобразовать его в секунды с начала эпохи Unix, чтобы вернуться в запросе. Что было бы самым легким для этого?

EDIT: о, мне нужна точность timestamp и я не могу полагаться на тип даты здесь, так как он имеет меньшую точность.

+2

Oracle DATE имеет точность во втором. Oracle TIMESTAMP имеет субсекундную точность. Но эпоха Unix, как правило, имеет только точность во втором. Поэтому я не уверен, что понимаю ваш комментарий о точности. Если ваша метка времени имеет миллисекунды или наносекунды, например, как вы хотите перевести это в эпоху Unix? вы хотите вернуть нецелое число? –

ответ

1

Возможно

WITH I AS (SELECT (TO_TIMESTAMP_TZ('01/03/12 16:13:33,000000000' || SESSIONTIMEZONE, 
            'DD/MM/RR HH24:MI:SS,FF9TZH:TZM') - 
        TO_TIMESTAMP_TZ('01/01/1970 00:00:00 GMT', 
            'DD/MM/YYYY HH24:MI:SS TZR')) AS UNIX_INTERVAL 
      FROM DUAL) 
SELECT (EXTRACT(DAY FROM UNIX_INTERVAL) * 86400) + 
     (EXTRACT(HOUR FROM UNIX_INTERVAL) * 3600) + 
     (EXTRACT(MINUTE FROM UNIX_INTERVAL) * 60) + 
     (EXTRACT(SECOND FROM UNIX_INTERVAL)) 
    FROM I 

поможет вам начать работу. Это предполагает дату эпохи 01: 00-19: 00: 00: 00Z.

Делитесь и наслаждайтесь.

Смежные вопросы