You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何格式化日期数组列以仅显示年份?

解决日期数组列提取年份的问题

嘿,这个需求其实挺常见的,针对PostgreSQL里的日期数组列,咱们可以通过拆分数组→提取年份→重新聚合的思路来实现,下面给你两种实用的写法:

方法一:unnest()+array_agg()分组聚合

这是最直观的写法,新手也能轻松理解:

SELECT 
  id,
  array_agg(date_part('year', unnest(event_dates_array))::text) AS event_dates_array
FROM test_table
GROUP BY id;

步骤拆解:

  • unnest(event_dates_array):把日期数组拆分成独立的行,每个日期元素单独占一行
  • date_part('year', ...):提取单个日期的年份(返回数值类型)
  • ::text:将年份数值转换为字符串,确保最终数组是你要的{'2012', '2013'}格式
  • array_agg(...):把拆分后提取的年份重新聚合成数组
  • GROUP BY id:因为拆分会让同一个id对应多行数据,所以需要按id分组聚合回原行结构

方法二:子查询内处理数组(无需GROUP BY)

如果觉得分组有点麻烦,可以用SELECT子查询的方式,针对每一行单独处理数组:

SELECT
  id,
  (SELECT array_agg(date_part('year', d)::text) FROM unnest(event_dates_array) d) AS event_dates_array
FROM test_table;

这种写法更紧凑,不需要额外的GROUP BY子句,子查询会自动处理当前行的日期数组,再返回聚合后的年份数组。

补充说明

如果你希望年份是数值类型(比如{2012,2013}),只需要去掉::text转换即可。两种方法都支持PostgreSQL 9.3及以上版本,这也是目前大多数环境的标配版本。

内容的提问来源于stack exchange,提问作者gb_spectrum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 10:43:11