Ошибки "Функция не существует" при попытке разбить столбец, содержащий массив timestampz, на текстовую строку с разделителями в Postgres

У меня есть таблица со столбцами, которые содержат массивы, которые я хочу преобразовать в строки, чтобы я мог разделить их по разделителю на несколько столбцов.

У меня проблемы с массивами дат с часовыми поясами.

create materialized view matview1 as select
    (location) as location,
    (nullif(split_part(string_agg(distinct name,'; '),'; ',1),'')) as name1,
    (nullif(split_part(string_agg(distinct name,'; '),'; ',2),'')) as name2,
    (nullif(split_part(string_agg(distinct name,'; '),'; ',3),'')) as name3,
    (array_agg(distinct(event_date_with_timestamp))) as event_dates
    from table2 b
    group by location;

В приведенном выше коде я создаю материализованное представление таблицы, чтобы объединить все записи таблицы, связанные с определенными местоположениями, в одну строку.

Как я могу создать дополнительные столбцы для каждой записи event_date, как я сделал с именами (например, Name1, Name2 и Name3 из массива 'name')?

Я попытался изменить массив в формат строки с помощью:

(nullif(split_part(array_to_string(array_agg(distinct(event_date_with_timestamp))),'; ',1),'')) as event_date1

Но это выдает ошибку:

"Функция array_to_string(отметка времени с часовым поясом []) не существует"

А приведение к разным типам данных всегда приводит к ошибкам, говорящим, что я не могу привести из типа timestampz во что-либо еще.

1 ответ

Я нашел способ сделать это путем приведения метки timestampz к тексту, а затем обратно снова, вот так:

(nullif(split_part(string_agg(distinct event_date::text,'; '),'; ',1),'')::date) as date1,
Другие вопросы по тегам