【发布时间】:2020-01-10 06:06:22
【问题描述】:
我在 postgres 中有以下函数,它们只接受 timestampz 并将记录的年龄作为类似于 Reddit 的字符串返回:
CREATE OR REPLACE FUNCTION ageFromTimestamp (t timestamp WITH TIME ZONE)
RETURNS text as $$
DECLARE interval text;
BEGIN
case
when extract(years from age(now(), t)) > 0 then interval = extract(years from age(now(), t)) || 'y';
when extract(months from age(now(), t)) > 0 then interval = extract(months from age(now(), t)) || 'mo';
when extract(days from age(now(), t)) > 0 then interval = extract(days from age(now(), t)) || 'd';
when extract(hours from age(now(), t)) > 0 then interval = extract(hours from age(now(), t)) || 'h';
when extract(minutes from age(now(), t)) > 0 then interval = extract(minutes from age(now(), t)) || 'm';
when extract(seconds from age(now(), t)) > 0 then interval = ceil(extract(seconds from age(now(), t))) || 's';
else interval = 'now';
end case;
return interval;
END;
$$ language 'plpgsql';
这工作得很好。我只是好奇是否有更好的方法来防止计算 extract(years from age(now(), t)) 两次?
我是 postgres 和 sql 的新手,所以学习新事物。
【问题讨论】:
-
子查询将所有单独的片段提取到单独的字段中?
标签: sql postgresql stored-procedures plpgsql postgres-9.6