使用PostgreSQL,同时使用AGE()函数通过查询在我的表中显示出生日期起的年龄
SELECT date_of_birth, AGE(NOW(), date_of_birth) AS age FROM person;
有以下内容,result。
我只想从时间戳中选择年份和月份,所以结果就像“ 1 year 3 mons”,
尝试使用EXTRACT(),一次只输出一个字段,
SELECT date_of_birth, EXTRACT(YEAR FROM AGE(NOW(), date_of_birth)) AS age FROM person;
和TO_CHAR()
SELECT date_of_birth, TO_CHAR(AGE(NOW(), date_of_birth), 'YY-MM') AS age FROM person;
但是结果不是所需的格式,任何人都可以解释如何正确使用上述方法或任何其他方法来获得所需的结果。
答案 0 :(得分:1)
您可以使用TO_CHAR()
设置间隔格式:
TO_CHAR(AGE(NOW(), date_of_birth), 'YY "Year" MM "month"') AS age
但是,一种通俗易懂的解决方案是分别构建零件:
CONCAT_WS(' ',
(CASE WHEN EXTRACT(YEAR FROM v.age) = 0 THEN NULL
WHEN EXTRACT(YEAR FROM v.age) = 1 THEN '1 year'
ELSE EXTRACT(YEAR FROM v.age) || ' years'
END),
(CASE WHEN EXTRACT(MONTH FROM v.age) = 1 THEN '1 month'
ELSE EXTRACT(MONTH FROM v.age) || ' months'
END)
) as age
处理“ 1年”与“ 2年”之类的事情。
Here是db <>小提琴。