Я хотел бы создать запрос для "преобразования" даты-времени postgresql в дату-дату matlab.Опыт работы с другими БД показал, что преобразование даты на стороне БД на намного быстрее, чем в Matlab.
Matlab хранит даты как количество дней (включая дроби) с произвольнойэпоха григорианской несуществующей даты 00-00-0000.
В Oracle это просто, потому что Oracle хранит даты внутри, как это делает Matlab, но с другой эпохой.
select (date_column_name - to_date('01-Jan-0001') + 365) ...
Прямое преобразование этого в синтаксис PG не работает:
select (date_column_name - date '01-Jan-0001' + interval 365) ...
Я начал с определенного дня в matlab, для тестирования:
>> num2str(datenum('2010-10-02 12:00'))
ans =
734413.5
Я был в и из pg docs весь день, extract
ing epoch
s и second
s, и т. Д. И я приблизился.В основном это получает секунды в интервале, который я просто делю на секунды в дне:
Select cast(extract(epoch from (timestamp '2010-10-02 12:00'
- timestamp '0000-01-01 23:10'
+ interval '2 day'
)
) as real
)/(3600.0*24.0) AS MDate
answer: 734413.51111111111
Но это демонстрирует некоторое странное поведение.Корректировка минут из метки времени эпохи не меняет ответ, за исключением одной конкретной минуты - т.е. 23:09 - это один ответ, 23:10 - другой, и он остается неизменным с 23:10 до 23:59.(другие часы имеют похожее поведение, хотя конкретная «минута» отличается.)
Есть идеи?Может быть, по-другому сделать это?
edit: использование 8.4.2