将间隔转换为时间数据类型而又不损失精度?

时间:2019-07-01 09:15:46

标签: postgresql time

我将例如65.463秒的持续时间存储为间隔。

不幸的是,外部应用程序不了解时间间隔数据类型,因此我尝试使用时间数据类型。医生说时间的分辨率是微秒。但是当我间隔时间时,我会损失毫秒!

我正在VIEW定义中使用duration :: time来执行从时间间隔到时间的转换。

还有其他方法可以进行投射/转换吗?

编辑:我应该说,我在转换为时间时确实尝试使用显式精度,例如:: 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 个答案:

答案 0 :(得分:1)

正如@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