嗨我有一个像下面这样的Postgresql查询来计算{1}和{2}的DateTime差异在几分钟内。postgresql查询小时分钟和秒
CAST(ROUND(EXTRACT(EPOCH from (({2}::timestamp) - ({1}::timestamp)))/60) AS INT)
我想计算以小时,分钟和秒之差显示如下:
3小时31分钟42秒
我需要为显示像上面怎么操作?
嗨我有一个像下面这样的Postgresql查询来计算{1}和{2}的DateTime差异在几分钟内。postgresql查询小时分钟和秒
CAST(ROUND(EXTRACT(EPOCH from (({2}::timestamp) - ({1}::timestamp)))/60) AS INT)
我想计算以小时,分钟和秒之差显示如下:
3小时31分钟42秒
我需要为显示像上面怎么操作?
SELECT to_char((col1 - col0), 'HH24 hrs MI "minutes" SS "seconds"') FROM T1;
这里是一个sqlfiddle:link
TO_CHAR函数需要的间隔(间隔是两个时间戳之间的时间间隔,并减去时间戳给你的间隔)。然后它需要一个格式化,你可以应用你想要的东西。
减去*日期*会给你一个'nteger'(中间的天数)。减去*时间戳*会产生一个“间隔”,它永远不会被称为“日期间隔”。 –
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
'天'覆盖休息。默认情况下,结果中没有更多的时间单位。
是否可能存在≥24小时的时差?另外,请提供源列的准确数据类型以及您的Postgres版本。没有它,这个问题就模糊不清。 –