Преобразование интервала в тип данных времени без потери точности? - PullRequest
0 голосов
/ 01 июля 2019

У меня есть время, например, 65,463 секунды, сохраненное в качестве интервала.

К сожалению, внешнее приложение не понимает тип данных интервала, поэтому я пытался использовать тип данных time.Док говорит, что время имеет разрешение в микросекундах.Но когда я приводил интервал ко времени, я теряю миллисекунды!

Я использую duration :: time в определении VIEW для выполнения приведения от интервала ко времени.

Есть ли другой способсделать приведение / преобразование?

Редактировать: Я должен был сказать, что я пытался использовать явную точность при приведении ко времени, т.е. :: time (3), но, похоже, ничего не изменилось.

Редактировать: Просмотреть определение:

CREATE OR REPLACE VIEW public.timetest
AS SELECT user_sessionlaps.laptime,
    user_sessionlaps.laptime::text AS test1,
    user_sessionlaps.laptime::text::interval AS test2,
    user_sessionlaps.laptime::text::interval::time without time zone AS test3,
    user_sessionlaps.laptime::text::interval::time(3) without time zone AS test4
   FROM user_sessionlaps;

enter image description here

1 Ответ

1 голос
/ 01 июля 2019

Как сказал @a_horse_with_no_name в своем комментарии, приведение к time сохраняет миллисекунды, но некоторые редакторы могут оставить это для удобства чтения.Если я возьму интервал с миллисекундами и приведу его к time, похоже, что миллисекунды и микросекунды были усечены, но если я вызову to_char для него, вы увидите, что точность была сохранена под капотом.

WITH ct AS (
  SELECT '3 MINUTES -3 SECONDS 3 MICROSECONDS'::interval as i
)
SELECT i,
    i::time without time zone,
    to_char(i::time without time zone, 'MI:SS.US')
FROM ct

The interval as is, as time, and as time formatted with to_char

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