Преобразовать 17 цифр с отметкой времени десятичной точки в SQL к дате - PullRequest
0 голосов
/ 08 декабря 2018

Попытка конвертировать 43439.961377314816 в дату.В настоящее время я использую этот код:

SELECT 
    (timestamp '1970-01-01 00:00:00 GMT' +
     numtodsinterval(WRITETIMESTAMP, 'SECOND')) at time zone 'CST',
    WRITETIMESTAMP
FROM 
    PEETM_FM.ROUTE

, но я получаю этот результат:

01-JAN-70 06.03.59.961377315 AM CST

Дата должна быть:

12/05/2018

Ответы [ 3 ]

0 голосов
/ 08 декабря 2018

Получается нужная вам дата:

select date '1899-12-30' + 43439.961377314816
from dual;

Похоже, вы используете даты Excel или что-то подобное.

0 голосов
/ 08 декабря 2018

У вас есть две проблемы в вашем запросе.Во-первых, вы использовали неверное базовое время.Как отмечает @GordonLinoff, базовое время для даты Excel на самом деле составляет 1900-01-01, а в Excel 1900 считается високосным годом.Это не ошибка в Excel как таковая, а сознательное проектное решение , которое было принято для копирования (глючного) поведения Lotus 1-2-3, которое имело такоеошибка.Итак, в Lotus 1-2-3 это ошибка, но в Excel это особенность.:-) Во-вторых, в датах Excel целая часть представляет число дней с базовой даты, а дробная часть представляет дробь дня .Однако в своем вызове NUMTODSINTERVAL вы указали аргумент interval_unit как 'SECOND';это должно было быть 'DAY'.

Соединяя эти вещи, мы получаем

WITH cte AS (SELECT 43439.961377314816 AS WRITETIMESTAMP FROM DUAL)
SELECT 
    (timestamp '1899-12-30 00:00:00 GMT' + numtodsinterval(WRITETIMESTAMP, 'DAY')) at time zone 'CST',
    WRITETIMESTAMP
FROM 
    cte

dbfiddle здесь

Удачи.

0 голосов
/ 08 декабря 2018

Это выглядит как ожидаемое поведение для меня.43439 секунд / 60/60 = 12 часов, и вы получаете около 12 часов от начальной отметки времени.

SELECT numtodsinterval('43439.961377314816', 'SECOND') as i FROM dual;

I                     
----------------------
+00 12:03:59.961377315

Почему вы думаете, что это даст вам дату в 2018 году?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...