是否有一个 Postgres 时间间隔格式化程序将年龄显示为 3y、4mo、2w、6d、7h、55m、24s、现在等等?



是否有一个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

最新更新