Если вы хотите удалить пустые элементы массивов и изменить их тип данных, вы можете array_remove
, unnest
, привести значения и, наконец, снова сгруппировать их с помощью array_agg
, например
WITH tempabc (id,course,enroll_dt) AS (
VALUES
('12345fgh-2bce-467f',array['BB','TT',''],array['01/07/2007 12:00:00 AM','15/09/2007 12:00:00 AM','']),
('1234rty-863d-4e4f',array['CRKT','HKY',''],array['01/01/2005 12:00:00 AM','01/07/2012 12:00:00 AM',''])
)
SELECT id, array_agg(course) AS course, array_agg(enroll_dt) AS enroll_dt FROM (
SELECT id,
unnest(array_remove(course,'')) AS course,
unnest(array_remove(enroll_dt,''))::date AS enroll_dt
FROM tempabc) q
GROUP BY id;
id | course | enroll_dt
--------------------+------------+-------------------------
12345fgh-2bce-467f | {BB,TT} | {2007-07-01,2007-09-15}
1234rty-863d-4e4f | {CRKT,HKY} | {2005-01-01,2012-07-01}
Если вы хотите создать запись для каждого значения массива, просто array_remove
и unnest
, например,
WITH tempabc (id,course,enroll_dt) AS (
VALUES
('12345fgh-2bce-467f',array['BB','TT',''],array['01/07/2007 12:00:00 AM','15/09/2007 12:00:00 AM','']),
('1234rty-863d-4e4f',array['CRKT','HKY',''],array['01/01/2005 12:00:00 AM','01/07/2012 12:00:00 AM',''])
)
SELECT id,
unnest(array_remove(course,'')) AS course,
unnest(array_remove(enroll_dt,''))::date AS enroll_dt
FROM tempabc;
id | course | enroll_dt
--------------------+--------+------------
12345fgh-2bce-467f | BB | 2007-07-01
12345fgh-2bce-467f | TT | 2007-09-15
1234rty-863d-4e4f | CRKT | 2005-01-01
1234rty-863d-4e4f | HKY | 2012-07-01
Дополнительная информация: