powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Изменить позицию в массиве
11 сообщений из 11, страница 1 из 1
Изменить позицию в массиве
    #40103318
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет

Подскажите насчёт массивов. Как переместить элемент из позиции N в позицию M?
Я понимаю, что можно удалить элемент N и вставить в позицию M +- 1.
Но таких функций я тоже не нашёл
...
Рейтинг: 0 / 0
Изменить позицию в массиве
    #40103330
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU
Всем привет

Подскажите насчёт массивов. Как переместить элемент из позиции N в позицию M?
Я понимаю, что можно удалить элемент N и вставить в позицию M +- 1.
Но таких функций я тоже не нашёл


а в позиции N что должно быть после? NULL?

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Изменить позицию в массиве
    #40103342
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

А разве есть разница?
Накидай хоть какой-то инфы )

insert_item, delete_item, move_item...
Что-то типа такого :)
...
Рейтинг: 0 / 0
Изменить позицию в массиве
    #40103345
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU
Maxim Boguk,

А разве есть разница?
Накидай хоть какой-то инфы )

insert_item, delete_item, move_item...
Что-то типа такого :)


Hm...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
DO
$BODY$
DECLARE 
  x integer[];
BEGIN
  x := ARRAY[1,2,3];
  RAISE NOTICE 'x is: %', x::text;
  x[5] := 2;
  x[2] := NULL;
  RAISE NOTICE 'x is: %', x::text;
END;
$BODY$
LANGUAGE plpgsql;

NOTICE:  x is: {1,2,3}
NOTICE:  x is: {1,NULL,3,NULL,2}
DO



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Изменить позицию в массиве
    #40103370
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

Это же не вставка и не удаление )
...
Рейтинг: 0 / 0
Изменить позицию в массиве
    #40103374
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU
Maxim Boguk,

Это же не вставка и не удаление )


Тогда точнее надо задачу ставить... с примерами.
Что такое удаление в Сшном массиве - тайна вообще великая например.
Да и вставка тоже. Массивы - не списки.

Можно через срезы всё сделалать впрочем
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DO
$BODY$
DECLARE 
  x integer[];
BEGIN
  x := ARRAY[1,2,3,4,5];
  RAISE NOTICE 'x is: %', x::text;
  x := x[1:2]||x[4:5]||x[3:3];
  RAISE NOTICE 'x is: %', x::text;
END;
$BODY$
LANGUAGE plpgsql;

NOTICE:  x is: {1,2,3,4,5}
NOTICE:  x is: {1,2,4,5,3}
DO
...
Рейтинг: 0 / 0
Изменить позицию в массиве
    #40103377
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

Спасибо, это похоже то, что нужно
У меня два вопроса
Прошу прощения за дилетантство, по сути только осваиваю Postgres
Может быть ты ответишь быстрее, чем мне удастся раскопать, нахрапом нагуглить не удалось

1. Правильно ли я понимаю, что вместо "x := x[1:2]||x[4:5];", например, может быть "x := x[1:N-1]||x[N+1:5];", где N - целочисленная переменная?

2. Я бы проверил это сам, но я вбил данный код в pgAdmin, он ругается на NOTICE
Не подскажешь, как это исправить?
Код: plaintext
1.
ERROR: ОШИБКА:  ошибка синтаксиса (примерное положение: "NOTICE")
LINE 14: NOTICE:  x is: {1,2,3,4,5}
...
Рейтинг: 0 / 0
Изменить позицию в массиве
    #40103380
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU, нельзя же быть таким ленивым! Последние три строки в примере Максима — результат работы, а не часть кода.
...
Рейтинг: 0 / 0
Изменить позицию в массиве
    #40103395
Maxim Boguk
Что такое удаление в Сшном массиве - тайна вообще великая например.

просто заполняются новые ячейки памяти без удалённого элемента
массив - это подряд идущие ячейки
...
Рейтинг: 0 / 0
Изменить позицию в массиве
    #40103402
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2
SOFT FOR YOU, нельзя же быть таким ленивым! Последние три строки в примере Максима — результат работы, а не часть кода.


Я не ленивый
Я протупил
Прошу прощения )
...
Рейтинг: 0 / 0
Изменить позицию в массиве
    #40103403
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо
Этот код работает

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DO
$BODY$
DECLARE 
  x integer[];
  n integer;
BEGIN
  n := 3;
  x := ARRAY[1,2,3,4,5];
  RAISE NOTICE 'x is: %', x::text;
  x := x[1:n-1]||x[n+1:5];
  RAISE NOTICE 'x is: %', x::text;
END;
$BODY$
LANGUAGE plpgsql;



Код: plaintext
1.
2.
ЗАМЕЧАНИЕ:  x is: {1,2,3,4,5}
ЗАМЕЧАНИЕ:  x is: {1,2,4,5}
DO
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Изменить позицию в массиве
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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