Postgres时间转换hh:mm:ss.us到hh:mm

时间:2018-06-24 23:00:53

标签: postgresql datetime time

在我的出勤应用程序中使用PostgreSQL数据库。

我有一个带有输入和输出时间(hh:mm:ss.us格式)的表。

当我减去(OUT -IN)的时间来计算工作时间时,由于精度的原因,结果不如预期。

如果IN时间为“ 22:12:56.09” &OUT TIme是“ 22:14:06.06”,仅考虑HH:mm的差异应为00:02,但实际上显示的“ 00:01:09.97”在excel中仅使用HH:mm变为“ 00:01”。 / p>

我正在尝试将时间从hh:mm:ss.us转换为hh:mm(时间格式),以便我可以减去时间并获得所需的输出。

我在SQL Server中做过类似的事情,但是在PostgreSQL中没有找到任何功能。请告知。

2 个答案:

答案 0 :(得分:0)

首先,您需要截断秒数。然后减去以获得预期的结果

选择

to_char(
  (
    to_char('22:14:06.06' :: time, 'HH24:MI'):: time - 
    to_char('22:12:56.09' :: time, 'HH24:MI'):: time
  ),
  'HH24:MI'
)

结果:00:02

一般解决方案:

select
  to_char(
  (
    to_char(out, 'HH24:MI'):: time - to_char(in, 'HH24:MI'):: time
  ),
  'HH24:MI'
)

to_char()的目的是将结果格式化为小时:分钟,而不是秒。 默认情况下,Postgres的间隔时间为秒。

答案 1 :(得分:0)

您可以将date_trunc函数与时间戳一起使用。

它会像这样工作:
select date_trunc('minute', out) - date_trunc('minute', in)

这将在时间戳上设置分钟精度,并将HH:mm:ss转换为HH:mm:00