[英]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.