sql - 如何从 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;
但是结果不是所需的格式,任何人都可以解释如何以正确的方式使用上述方法或任何其他方法来获得所需的结果。
解决方案
您可以使用以下格式格式化间隔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。
推荐阅读
- php - WooCommerce 从产品/类别中删除包装标签
- c - 我是否在我的堆实现的添加函数中正确实例化指针
- swift - 继承自 EKCalendarItem
- c# - HttpPost asp mvc 上的 ConcurrencyException
- ios - 检索照片的拍摄时间
- unicode - 可能的 Unicode 日文数字/小数?
- javascript - 应用程序返回错误“您的用户照片 IMG 包装尚未呈现为圆形”
- mysql - 使用 SSL 使用 MySQL - 意外的 EOF
- c++ - XDX^T 对 D 对角线的快速矩阵乘法
- c# - 非静态字段,即使我将函数声明为静态也会出错