首页 > 解决方案 > 如何从 postgreSQL 表中的时间戳中提取月份和年份

问题描述

使用 PostgreSQL,同时使用 AGE() 函数在我的表中显示从出生日期算起的年龄,并带有查询

SELECT date_of_birth, AGE(NOW(), date_of_birth) AS age FROM person;

得到以下结果

我想从时间戳中只选择年份和月份,所以结果就像“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;

但是结果不是所需的格式,任何人都可以解释如何以正确的方式使用上述方法或任何其他方法来获得所需的结果。

标签: sqlpostgresql

解决方案


您可以使用以下格式格式化间隔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 年”之类的事情。

是一个 db<>fiddle。


推荐阅读