Преобразование серийной даты Excel в Log Parser

Я конвертирую серийные даты Excel (даты OA) в Log Parser.

У меня есть этот запрос:

SELECT TOP 10
  Field1 as ExcelSerialDate, /* days since 1900-01-01 */ 
  to_timestamp('1900-01-01 00:00:00', 'yyyy-MM-dd hh:mm:ss') as BaseDate,
  mul(sub(to_real(Field1),2.0),86400.0) as SecondsFromBase,
  add(to_localtime(to_timestamp('1900-01-01 00:00:00', 'yyyy-MM-dd hh:mm:ss')),
  to_timestamp(mul(sub(to_real(Field1),2.0),86400.0))) as Date
FROM 'MyData.txt'

где MyData.txt просто содержит серийную дату Excel в каждой строке:

ExcelSerialDate
42397.6668676968
42397.6663989236
42397.664126875
42397.6668321065
42397.6668733565
42397.6668907523
42397.6668711921
42397.6657181597
42397.666233044
42397.6654758681 ...

Это дает вывод

ExcelSerialDate BaseDate    SecondsFromBase Date
42397.6668676968    01/01/00 12:00:00 AM    3662985617.369  28/01/16 04:00:17 PM
42397.6663989236    01/01/00 12:00:00 AM    3662985576.867  28/01/16 03:59:36 PM
42397.664126875 01/01/00 12:00:00 AM    3662985380.562  28/01/16 03:56:20 PM
42397.6668321065    01/01/00 12:00:00 AM    3662985614.294  28/01/16 04:00:14 PM
42397.6668733565    01/01/00 12:00:00 AM    3662985617.858  28/01/16 04:00:17 PM
42397.6668907523    01/01/00 12:00:00 AM    3662985619.361  28/01/16 04:00:19 PM
42397.6668711921    01/01/00 12:00:00 AM    3662985617.671  28/01/16 04:00:17 PM
42397.6657181597    01/01/00 12:00:00 AM    3662985518.049  28/01/16 03:58:38 PM
42397.666233044 01/01/00 12:00:00 AM    3662985562.535  28/01/16 03:59:22 PM
42397.6654758681    01/01/00 12:00:00 AM    3662985497.115  28/01/16 03:58:17 PM

что правильно.

Это лучший способ? У меня есть два вычитания 2 дня из серийной даты перед созданием временной метки и добавлением ее к базовой дате 1900-01-01, и это кажется нелогичным.

0 ответов

Другие вопросы по тегам