繁体   English   中英

Postgres - 如何格式化日期数组列

[英]Postgres - how to format a date array column

当我查询我的test_table我得到以下行:

SELECT *
FROM test_table;
id    event_dates_array
1     {'2012-01-01', '2013-01-01'}
2     {'2015-01-01', '2016-01-01'}

event_dates_array是一个date array列。

我希望查询返回格式化的event_dates_array以便日期数组只显示年份,如下所示:

id    event_dates_array
1     {'2012', '2013'}
2     {'2015', '2016'}

您可以使用普通日期列来执行此操作,如下所示: date_part('year', event_dates)

但是你如何为日期数组列做呢?

您可以使用JOIN LATERAL访问数组中的每个日期并聚合每个date_part

WITH data(id, event_dates_array) AS (
    VALUES ('1', ARRAY ['2012-01-01', '2013-01-01']::date[])
         , ('2', ARRAY ['2015-01-01', '2016-01-01']::date[])
)
SELECT id, event_years
FROM data
CROSS JOIN LATERAL (
    SELECT array_agg(date_part('year', date)::int) AS event_years
    FROM unnest(event_dates_array) AS date
) AS f

返回

+--+-----------+
|id|event_years|
+--+-----------+
|1 |{2012,2013}|
|2 |{2015,2016}|
+--+-----------+

如果所有日期文字的月和日部分为-01-01 ,则使用

SELECT id, REPLACE(event_dates_array, '-01', '') AS event_years_array
  FROM test_table;

id  event_years_array
1   {'2012', '2013'}
2   {'2015', '2016'}

就足够了。

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM