powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / И снова массивы... Подскажите Плиз
8 сообщений из 8, страница 1 из 1
И снова массивы... Подскажите Плиз
    #35303654
Antoxa1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите возможно ли такое в принципе
Есть поле int[] надо для каждого элемента массива выполнить функцию типа GetName(int): text
что то вроде:
{12 24 1 45} - id-ки чего то
а надо получить строку вида:
чего_то16, чего_то2, чего_то1, чего_то50
И главное, сделать это без написание вспомогательной функции
...
Рейтинг: 0 / 0
И снова массивы... Подскажите Плиз
    #35305534
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antoxa1982Подскажите возможно ли такое в принципе
Есть поле int[] надо для каждого элемента массива выполнить функцию типа GetName(int): text
что то вроде:
{12 24 1 45} - id-ки чего то
а надо получить строку вида:
чего_то16, чего_то2, чего_то1, чего_то50
И главное, сделать это без написание вспомогательной функции
Тогда лучше всего создать развернутый справочник:
Id, Name VALUES ((12, '12'), (24, '24'), (1, '1'), (45, '45'))

Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT
CL.Id,
Array_Accum(GetName(CR.Id))
FROM MainTable CL
INNER JOIN SpravTable CR ON CR.Id = ANY (CL.IdList)
GROUP BY  1 

При этом, определить аггрегат:

Код: plaintext
1.
2.
3.
CREATE AGGREGATE "public"."array_accum" ( BASETYPE = "anyelement",
SFUNC = "array_append", STYPE = "anyarray",
INITCOND = "{}");
...
Рейтинг: 0 / 0
И снова массивы... Подскажите Плиз
    #35306066
бухарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
одним запросом не получится, либо доп. функция либо агрегат...
...
Рейтинг: 0 / 0
И снова массивы... Подскажите Плиз
    #35306525
Stud99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create temp table names (id int, name text);
insert into names values ( 1 ,'foo'), ( 2 ,'bar'),( 3 ,'baz');

select array(
  select (select name from names where id=ids[i])
  from generate_series( 1 ,array_upper(ids, 1 )) s(i)
) from (select '{1,3,2}'::int[]) a(ids)
-------------
{foo,baz,bar}
как-то так...
...
Рейтинг: 0 / 0
И снова массивы... Подскажите Плиз
    #35306787
бухарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stud99
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create temp table names (id int, name text);
insert into names values ( 1 ,'foo'), ( 2 ,'bar'),( 3 ,'baz');

select array(
  select (select name from names where id=ids[i])
  from generate_series( 1 ,array_upper(ids, 1 )) s(i)
) from (select '{1,3,2}'::int[]) a(ids)
-------------
{foo,baz,bar}
как-то так...

у него итак есть массив, надо в строку вывести
...
Рейтинг: 0 / 0
И снова массивы... Подскажите Плиз
    #35307040
Stud99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
бухарьу него итак есть массив, надо в строку вывести
ну дык, array_to_string поверх - и всё
...
Рейтинг: 0 / 0
И снова массивы... Подскажите Плиз
    #35308181
Antoxa1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем большое
Все получилось, без всякой вспомогательной лабуды :-)
Stud99 отдельное спасибо
...
Рейтинг: 0 / 0
И снова массивы... Подскажите Плиз
    #35308695
бухарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stud99 бухарьу него итак есть массив, надо в строку вывести
ну дык, array_to_string поверх - и всё

класс, я и незнал такую, пасиба !
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / И снова массивы... Подскажите Плиз
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]