postgresql 历元时间差,当日期变化时不显示正确值

xe55xuns  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(138)
SELECT
 r.order_id
,c.order_time
,r.pickup_time
,EXTRACT(epoch FROM (r.pickup_time - c.order_time) / 60) AS diff
FROM runner_orders1 r
JOIN customer_orders1 c ON c.order_id = r.order_id
WHERE distance != 0;

| 订单标识|订单时间|拾取时间|差异|
| - -|- -|- -|- -|
| 一个|2020年1月1日18时05分02秒|2020年01月01日18时15分34秒|10.533333美元|
| 2个|2020年1月1日19时00分52秒|2020年1月1日19时10分54秒|10.033333美元|
| 三个|2020年1月2日23时51分23秒|2020年1月3日00:12:37| 21.233333一人|
| 三个|2020年1月2日23时51分23秒|2020年1月3日00:12:37| 21.233333一人|
| 四个|2020年1月4日13时23分46秒|2020年1月4日13时53分03秒|29.283333美元|
| 四个|2020年1月4日13时23分46秒|2020年1月4日13时53分03秒|29.283333美元|
下面是我上面的sql输出,如果你看到时间戳的天数不同时,值是不正确的。请检查和帮助。

3 | 2020-01-02 23:51:23 | 2020-01-03 00:12:37 | 21.233333
xesrikrc

xesrikrc1#

您的查询返回的结果 * 完全 * 正确(至少到6位十进制数字)。问题似乎源于你的期望。显然,你正在寻找diff是小步舞曲和秒,然而,这不是你得到的。通过提取历元并除以60,你的结果是小步舞曲和小步舞曲的小数部分。在所选的中,pickup_timeorder_time之间的时间差是21:14(分:秒),返回的结果是21:13.99998(分:秒,小数秒)。这只是使用epoch不是一个好做法的另一个原因(其他信息请参见Epoch Mania)。
通过减去日期来更正结果(您已经在这样做了)。这将以 Hours:Minuets:Seconds 的间隔形式给出结果。对于您的示例,它将返回00:21:14(请参阅demo

select r.order_id
     , c.order_time
     , r.pickup_time
     , r.pickup_time - c.order_time as diff
  from runner_orders1 r
  join customer_orders1 c on c.order_id = r.order_id
 where distance != 0;

相关问题