是否有一个Postgres时间间隔格式化程序将年龄显示为3y, 4mo, 2w, 6d, 7h, 55m, 24s, now and so on
?类似于Reddit如何显示帖子/评论的年龄?
时间戳列的数据类型如下:
api_created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
我能够使用以下方法从now()
获取此时间戳的年龄:
select age(now(),api_created_at) from post;
这给出了2019-09-04 10:04:19.882688+01
为:
2 days 23:36:45.27627
我需要这个年龄作为类似于reddit的更友好的字符串。是否有内置的格式化程序?还是我可以使用的自定义函数?
编辑:我需要它来使其"四舍五入"/地板/ceil?就像reddit简单地说"3d"而不是"3d 23m 55s"一样。因此,它不是说 1d 2h,而是简单地说 1d。
您可以使用to_char()
来实现此目的:
select to_char(age(timestamp '2019-09-07 10:53:14', timestamp '2019-09-04 10:04:19'),
'yy"y" mm"mo" dd"d" mm"m" ss"s"')
返回
00y 00mo 03d 00m 55s