Теперь я хочу дополнительно преобразовать дату в наносекунды
Хорошо, но конвертировать в наносекунды с каких это пор? Глядя на ваш пример, я предполагаю, что начальной точкой будет '01-JAN-1970'
.
Если я хочу преобразовать дату в миллисекунды с 01-JAN-1970
, я бы сделал следующее:
SQL> SELECT to_number(SYSDATE - to_date('01-JAN-1970','DD-MON-YYYY')) * (24 * 60 * 60 * 1000) milliseconds
2 FROM dual;
MILLISECONDS
--------------------
1424428022000
SQL>
Теперь,
1 миллисекунда = 1000000 наносекунд
, используя эту формулу, просто умножьте ее на разницу дат.
Преобразование даты в наносекунды:
SQL> SELECT to_number(SYSDATE - to_date('01-JAN-1970','DD-MON-YYYY')) * (24 * 60 * 60 * 1000 * 1000000) nanoseconds
2 FROM dual;
NANOSECONDS
--------------------
1424428111000000000
SQL>
Чтобы вернуть его в актуальное состояние:
SQL> alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS';
Session altered.
SQL> SELECT TO_CHAR(to_date('1970-01-01 00','yyyy-mm-dd hh24')
2 +
3 (1424428111000000000 )/1000000/1000/60/60/24 , 'YYYY-MM-DD HH12:MI:SS am') nano_to_date
4 FROM dual;
NANO_TO_DATE
----------------------
2015-02-20 10:28:31 am
SQL>
ОБНОВЛЕНИЕ относительно TIMEZONE
Лучше явно указывать часовой пояс.
Вы можете указать часовой пояс в самом литерале или указать его как UTC
и преобразовать в свой local timezone
.
См. этот ответ.
person
Lalit Kumar B
schedule
20.02.2015