Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Изменить позицию в массиве / 11 сообщений из 11, страница 1 из 1
09.10.2021, 17:25
    #40103318
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить позицию в массиве
Всем привет

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

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


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

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

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

insert_item, delete_item, move_item...
Что-то типа такого :)
...
Рейтинг: 0 / 0
09.10.2021, 19:13
    #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
09.10.2021, 22:52
    #40103370
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить позицию в массиве
Maxim Boguk,

Это же не вставка и не удаление )
...
Рейтинг: 0 / 0
09.10.2021, 23:47
    #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
10.10.2021, 00:23
    #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
10.10.2021, 01:47
    #40103380
Ы2
Ы2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить позицию в массиве
SOFT FOR YOU, нельзя же быть таким ленивым! Последние три строки в примере Максима — результат работы, а не часть кода.
...
Рейтинг: 0 / 0
10.10.2021, 11:03
    #40103395
Изменить позицию в массиве
Maxim Boguk
Что такое удаление в Сшном массиве - тайна вообще великая например.

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


Я не ленивый
Я протупил
Прошу прощения )
...
Рейтинг: 0 / 0
10.10.2021, 12:47
    #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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Изменить позицию в массиве / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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