2017-01-01 744 views
1

嗨我有一个像下面这样的Postgresql查询来计算{1}和{2}的DateTime差异在几分钟内。postgresql查询小时分钟和秒

CAST(ROUND(EXTRACT(EPOCH from (({2}::timestamp) - ({1}::timestamp)))/60) AS INT) 

我想计算以小时,分钟和秒之差显示如下:

3小时31分钟42秒

我需要为显示像上面怎么操作?

+0

是否可能存在≥24小时的时差?另外,请提供源列的准确数据类型以及您的Postgres版本。没有它,这个问题就模糊不清。 –

回答

1
SELECT to_char((col1 - col0), 'HH24 hrs MI "minutes" SS "seconds"') FROM T1; 

这里是一个sqlfiddle:link

TO_CHAR函数需要的间隔(间隔是两个时间戳之间的时间间隔,并减去时间戳给你的间隔)。然后它需要一个格式化,你可以应用你想要的东西。

Formatting functions in PostgreSQL

+1

减去*日期*会给你一个'nteger'(中间的天数)。减去*时间戳*会产生一个“间隔”,它永远不会被称为“日期间隔”。 –

1

timestamp 2个或timestamptz值的减法产生interval。 (虽然减去2个date值产生integer!)
Details about date/time types in the manual.

一个interval的默认文本表示可能是足够的:

SELECT timestamp '2017-1-6 12:34:56' - timestamp '2017-1-1 0:0'; 

结果是一个interval,显示为:

5 days 12:34:56 

如果您需要问题中的格式,则需要指定如何处理> = 24 ho URS。添加'天'?或者相应地增加小时数?

@Nobody provided如何使用to_char()。但添加天的一种方式或其他:

SELECT to_char(ts_col2 - ts_col1, 'DD" days "HH24" hours "MI" minutes "SS" seconds"'); 

结果:

05 days 12 hours 34 minutes 56 seconds 

'天'覆盖休息。默认情况下,结果中没有更多的时间单位。